名前¶
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
-
ファイル名を取ります。
- dir
- next
-
このメソッドを呼び出すと1つのイテレーションを行います。 ファイル名、あるいは何もすることがないと
undef
を返します。 - first
-
このメソッドを呼び出すとイテレータの初期化を行います。 検索を再び行うために使うことができます。しかしいくつかの 小さな変更をともないます(ディレクトリ・ルーツ、 statefileオプション、異なるフィルタ)。
- dir([ \@dir ])
-
このメソッドは検索のためのディレクトリ・リストを取得、設定します。
- filter([ \&code ])
-
このメソッドは
next
メソッドにより使われるフィルター・メソッドを 取得、設定します。 - statefile([ $file ])
-
このメソッドは検索状態を保存するために使われるファイル名を取得、設定します。 ("STORING STATE"を参照)。
状態の保存¶
コンストラクタのstatefile
オプションあるいはオブジェクトのstatefile
フィールドが設定されると、イテレータは1つのイテレーションの後、 内部状態を記録し、新しいイテレーションの前に内部状態を設定するために Storableを使います。この仕組により、エラーが発生した後、 検索を続けることができます。
参考資料¶
クレジット(=CREDITS)¶
Marc Jason Dominius's YAPC::EU 2003 classes.
作者(=AUTHOR)¶
Robert Silve <[email protected]>
翻訳者¶
川合 孝典([email protected])