File::Pathでディレクトリを作る
自分には、ちょっと分かりにくかったのでメモ。
use v5.12;
use warnings;
use FindBin qw($Bin);
use File::Path qw(make_path);
# ディレクトリが生成可能なパス
my $path1 = $Bin . '/foo/bar';
# 権限の問題で失敗するであろうパス
my $path2 = '/hoge/fuga';
my $err;
make_path( $path1, $path2, {
verbose => 1, # 実行結果の出力
error => \$err # エラー情報の取得
});
# エラー情報は、
# ハッシュリファレンスの配列のリファレンスが入っている
if ( @{$err} ) {
foreach my $diag (@{$err}) {
my ($file, $message) = %{$diag};
if ( $file eq '' ) {
print "general error: $message\n";
}
else {
print "problem unlinking $file: $message\n";
}
}
}
実行結果
$ perl aaa.pl
mkdir /Users/(user name)/foo
mkdir /Users/(user name)/foo/bar
mkdir /hoge
mkdir /hoge/fuga
problem unlinking /hoge: Permission denied
problem unlinking /hoge/fuga: No such file or directory
エラーの有無は、デリファレンスした配列で判定する必要がある。
verboseは出す必要はないけど、
エラー情報はdieする前に出力したいところ。
おしまい。
Leave a Comment