Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発なら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 - パッケージ変数を一時的に退避して復元

Qiitaで
「3分間Perlテキストクッキング」
という連載を始めました。
テキスト処理を題材にして、3分くらいで読める分量で、書いていきます。
文字コード、テキストデータ、コンピュータにおけるテキストの扱いなど、ソフトウェアの基礎の話題も
3分間Perlテキストクッキング