Perlゼミ

  1. Perl
  2. ファイル操作
  3. here

階層を持つディレクトリを一度に削除する

階層を持つディレクトリを一度に削除するには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";
  }
}

(参考)local - パッケージ変数を一時的に退避して復元

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「こっ、こしゃくな。
このPerオタクめ~!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!