ディレクトリを生成する
mkdir
は、FILENAME で指定された名前のディレクトリを
MODE で指定されたパーミッション (umask
の制約を受けます) で生成します。
成功すれば真を返し、失敗すれば偽を返しエラーメッセージを $! にセットします。
MODE が省略されるとデフォルト値として 0777 が適用されます。
FILENAME が省略されたらデフォルト値として $_ の値が適用されます。
次のコードは sample
という名前のディレクトリをカレントディレクトリに生成します。
mkdir './sample' or die "Failed to create a directory: $!\n";
一般的に、必要最小限の厳格なパーミッションを MODE に指定して、
スクリプト利用者にパーミッションを緩くする手段を与えずにディレクトリを生成するよりかは、
緩めのパーミッションを MODE に指定しておき、スクリプト利用者が umask
で実際のディレクトリ生成時のパーミッションを制限できるようにするのが良いでしょう。
つまり、一般的には MODE を指定せずにデフォルト値の 0777 が適用されるようにすれば良いということです。
ただし、機密性が高いディレクトリにしたいときはその限りではありません。
そのような場合は、必要最小限の厳格なパーミッションを MODE に指定するべきです。
FILENAME の最後にスラッシュが存在すると、Perl はそれを無視します。複数のスラッシュが連続していたとしても、それらすべてが無視されます。
mkdir './sample///'; # 最後の /// は無視される
mkdir
は再帰的にディレクトリを生成しません。
たとえば次のコードのようにカレントディレクトリに ./foo/bar/baz
を生成したいとします。
つまり、カレントディレクトリにディレクトリ foo
を生成し、
その配下に ディレクトリ bar
を生成し、
さらにその配下に ディレクトリ baz
を生成したいとします。
mkdir './foo/bar/baz'
or die "Failed to create directory: $!\n"; # foo も bar も baz も生成されず die が呼ばれる
上記コードでは foo
も bar
も baz
も生成されず、
die
が呼ばれます。
もし再帰的にディレクトリを一度に生成したいなら、
File::Path モジュールの
make_path
関数を使うと良いでしょう。
use File::Path qw(make_path);
make_path('./foo/bar/baz');