階層を持つディレクトリを一度に削除する
階層を持つディレクトリを一度に削除するにはFile::Pathモジュールのrmtreeを使用します。rmtree の戻り値は、削除することのできた、ファイル数です。
use File::Path 'rmtree'; rmtree $dir;
サンプル
階層を持つディレクトリを一度に削除するサンプルです。
use strict;
use warnings;
use File::Path 'rmtree';
# ディレクトリを削除する
# 準備(ディレクトリの作成)
my $dir1 = "dir_20080527_$$";
my $dir2 = "$dir1/dir2";
mkdir $dir1
or die "$dir1 を作成することができません。 : $!";
mkdir $dir2
or die "$dir2 を作成することができません。 : $!";
print "準備: $dir1 と $dir2 が作成されました。\n\n";
print "1: 階層を持つディレクトリを一度に削除する。\n";
{
# 警告をキャッチするには、__WARN__シグナルを
# 捕獲するシグナルハンドラを使うしかない。
# ( 古いrmtreeの実装の場合 )
# 第一引数に、警告の内容が格納される。
local $SIG{__WARN__} = sub {
my $msg = shift;
die "$msg";
};
if (-d $dir1) {
# rmtree 関数で、 warn が呼ばれたら、
# 上記の sub{ } の中に移り、die で終了する。
rmtree($dir1);
print "$dir1 は削除されました。\n";
}
}
Perlゼミ

