Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. モジュール
  3. here

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のみを紹介しています。

書き込み権限がなかったためにディレクトリを作成できなかった場合などにエラーとなります。ディレクトリがすでに存在している場合はエラーにはなりません。

関連

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。