=encoding euc-jp =head1 名前 Find::File::Iterator - ファイル検索ためのイテレータ・インターフェース =head1 概要 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; =head1 説明 Find::File::Iteratorはディレクトリ・ツリーを通して検索するための イテレータ・オブジェクトです。各ファイル名に対して簡単にフィルターをかける ことができます。検索を中断し、後で同じ検索を続けたいときには、 検索状態を保存することも簡単にできます。 Find::File::IteratorはLを継承しています。 そのためimapとigrepコンストラクタを使うことができます。 =over 4 =item create(%opt) これがコンストラクタです。C<%opt>は以下のキーを受け付けます: =over 4 =item dir C<< => \@dir >> ディレクトリのリストへのリファレンスを取ります。 =item filter C<< => \&code >> コード・リファレンスを取ります。 =item statefile C<< => $file >> ファイル名を取ります。 =back =item next このメソッドを呼び出すと1つのイテレーションを行います。 ファイル名、あるいは何もすることがないとCを返します。 =item first このメソッドを呼び出すとイテレータの初期化を行います。 検索を再び行うために使うことができます。しかしいくつかの 小さな変更をともないます(ディレクトリ・ルーツ、 statefileオプション、異なるフィルタ)。 =item dir([ \@dir ]) このメソッドは検索のためのディレクトリ・リストを取得、設定します。 =item filter([ \&code ]) このメソッドはCメソッドにより使われるフィルター・メソッドを 取得、設定します。 =item statefile([ $file ]) このメソッドは検索状態を保存するために使われるファイル名を取得、設定します。 (Lを参照)。 =back =head1 状態の保存 コンストラクタのCオプションあるいはオブジェクトのC フィールドが設定されると、イテレータは1つのイテレーションの後、 内部状態を記録し、新しいイテレーションの前に内部状態を設定するために Lを使います。この仕組により、エラーが発生した後、 検索を続けることができます。 =head1 参考資料 L =head1 クレジット(=CREDITS) Marc Jason Dominius's YAPC::EU 2003 classes. =head1 作者(=AUTHOR) Robert Silve =head1 翻訳者 川合 孝典(GCD00051@nifty.ne.jp)