Perlのmkdirでパーミッションを指定してもumaskが有効になるためmkdirに指定したパーミッション値になりません。
(umaskが0であれば意図したパーミッションになりますが…)
以下にディレクトリおよびファイルのパーミッションを変更するchmodについてサンプルコードを記します。
htmlinsert(): The given local file does not exist or is not readable.
$ perl -v This is perl 5, version 14, subversion 2 (v5.14.2) built for i686-linux-gnu-thread-multi-64int (with 57 registered patches, see perl -V for more detail) <snip>
$ lsb_release -d Description: Ubuntu 12.04.4 LTS
本サンプルコードを実行する前に、端末から以下のコマンドでファイルおよびディレクトリを作成しました。
$ touch foo.txt $ mkdir bar
パーミッションは以下の通りです。
$ ls -ld foo.txt bar/ drwxrwxr-x 2 sakura sakura 4096 3月 6 11:21 bar/ -rw-rw-r-- 1 sakura sakura 0 3月 6 11:21 foo.txt
umask値は以下の通りです。
$ umask 0002
use strict; use warnings; chmod 0777, 'foo.txt'; chmod 0777, 'bar';上記のサンプルコードを実行すると以下のようにパーミッションが変更されたのが確認できます。
$ ls -ld foo.txt bar/ drwxrwxrwx 2 sakura sakura 4096 3月 6 11:21 bar/ -rwxrwxrwx 1 sakura sakura 0 3月 6 11:21 foo.txt
上記のサンプルコードを以下のように書くこともできます。
上記と同様の動作になります。
use strict; use warnings; my @t = ('foo.txt', 'bar'); chmod 0777, @t;
以上、Perlでパーミッションを変更するときのサンプルコードでした。