File::Path - 複数階層のディレクトリを作成・削除
File::Pathモジュールを使用すると、複数階層のディレクトリを作成したり、削除したりすることができます。
# モジュールの読み込みと関数のインポート use File::Path qw/mkpath rmtree/;
mkpathで複数階層のディレクトリの作成を行うことができます(※1)。戻り値は作成したディレクトリ名の一覧です。たとえば'xxx/yyy/zzz'というディレクトリを作成した場合は@createdは('xxx', 'xxx/yyy', 'xxx/yyy/zzz')になります。mkpathでエラー(※2)が発生した場合は例外が投げられます。
# 複数階層のディレクトリの作成 @created = mkpath $dir;
第3引数でディレクトリ作成時のパーミッションを指定することができます。デフォルトは0777です。(第2引数は作成したディレクトリ名を標準出力に出力するかどうかの指定です。)
@created = mkpath($dir, 0, 0644);
rmtreeで複数階層のディレクトリの削除を行うことができます。戻り値は削除することのできたファイル(ディレクトリを含む)の数です。削除でエラーが発生した場合にrmtreeは警告を発生させます。
# 複数階層のディレクトリの削除 $removed = rmtree $dir;
mktreeで複数階層のディレクトリを作成するサンプルです。
# 複数階層のディレクトリの作成 my $dir = 'xxx/yyy/zzz'; mkpath $dir;
rmtreeで複数階層のディレクトリを削除するサンプルです。'xxx'ディレクトリ以下のすべてのファイルとディレクトリが削除されます。
my $dir = 'xxx'; rmtree $dir;
rmtreeで発生した警告をキャッチして例外に変換するサンプルです。
my $dir = 'xxx'; local $SIG{__WARN__} = sub { die @_ }; rmtree $dir;
File::PathのAPIには新しいものや新しい機能が追加されたものもありますが、ここでは互換性を考慮して古いAPIのみを紹介しています。
書き込み権限がなかったためにディレクトリを作成できなかった場合などにエラーとなります。ディレクトリがすでに存在している場合はエラーにはなりません。