File-Find-Iterator-0.3 > Find::File::Iterator

名前

Find::File::Iterator - ファイル検索ためのイテレータ・インターフェース

概要

  use File::Find::Iterator;
  my $find = File::Find::Iterator->new(dir => ["/home", "/var"],
                                       filter => \&isdir);
  sub isdir { -d }

  while (my $f = $find->next) { print "file : $f\n" }
  
  #別のフィルターで再読込
  $find->filter(\&ishtml);
  $find->first;
  while (my $f = $find->next) { print "file : $f\n" }

  sub ishtml { /\.html?$/ }

  # 状態を格納するためファイルを使用
  $find->statefile($statefile);
  $find->first;
  # 今度はクラッシュするかもしれません
  while (my $f = $find->next) 
  { print "file : $f\n" }

  # imapとigrepの利用
  use File::Find::Iterator qw(imap igrep);
  my $find = File::Find::Iterator->new(dir => ["/home", "/var"]);
  $find = imap { -M } igrep { -d } $find;

説明

Find::File::Iteratorはディレクトリ・ツリーを通して検索するための イテレータ・オブジェクトです。各ファイル名に対して簡単にフィルターをかける ことができます。検索を中断し、後で同じ検索を続けたいときには、 検索状態を保存することも簡単にできます。

Find::File::IteratorはClass::Iteratorを継承しています。 そのためimapとigrepコンストラクタを使うことができます。

create(%opt)

これがコンストラクタです。%optは以下のキーを受け付けます:

dir => \@dir

ディレクトリのリストへのリファレンスを取ります。

filter => \&code

コード・リファレンスを取ります。

statefile => $file

ファイル名を取ります。

next

このメソッドを呼び出すと1つのイテレーションを行います。 ファイル名、あるいは何もすることがないとundefを返します。

first

このメソッドを呼び出すとイテレータの初期化を行います。 検索を再び行うために使うことができます。しかしいくつかの 小さな変更をともないます(ディレクトリ・ルーツ、 statefileオプション、異なるフィルタ)。

dir([ \@dir ])

このメソッドは検索のためのディレクトリ・リストを取得、設定します。

filter([ \&code ])

このメソッドはnextメソッドにより使われるフィルター・メソッドを 取得、設定します。

statefile([ $file ])

このメソッドは検索状態を保存するために使われるファイル名を取得、設定します。 ("STORING STATE"を参照)。

状態の保存

コンストラクタのstatefileオプションあるいはオブジェクトのstatefile フィールドが設定されると、イテレータは1つのイテレーションの後、 内部状態を記録し、新しいイテレーションの前に内部状態を設定するために Storableを使います。この仕組により、エラーが発生した後、 検索を続けることができます。

参考資料

Class::Iterator

クレジット(=CREDITS)

Marc Jason Dominius's YAPC::EU 2003 classes.

作者(=AUTHOR)

Robert Silve <robert@silve.net>

翻訳者

川合 孝典(GCD00051@nifty.ne.jp)