次のようなPerlのFile::Findモジュールを使用できます。
find( \&wanted, @directories);
関数にパラメータを追加するにはどうすればよいwanted
ですか?
たとえば、/tmp
各ファイルからいくつかの情報を抽出する際にファイルをトラバースしたいので、結果を別のディレクトリに保存する必要があります。出力ディレクトリはパラメータとして指定する必要があります。
次のようなPerlのFile::Findモジュールを使用できます。
find( \&wanted, @directories);
関数にパラメータを追加するにはどうすればよいwanted
ですか?
たとえば、/tmp
各ファイルからいくつかの情報を抽出する際にファイルをトラバースしたいので、結果を別のディレクトリに保存する必要があります。出力ディレクトリはパラメータとして指定する必要があります。
クロージャーを使用します。
use File::Copy;
my $outdir= "/home/me/saved_from_tmp";
find( sub { copy_to( $outdir, $_); }, '/tmp');
sub copy_to
{ my( $destination_dir, $file)= @_;
copy $file, "$destination_dir/$file"
or die "could not copy '$file' to '$destination_dir/$file': $!";
}
好きな種類のコード参照を作成できます。名前付きサブルーチンへの参照を使用する必要はありません。これを行う方法の多くの例については、私のFile :: Find::Closuresモジュールを参照してください。この質問に正確に答えるために、そのモジュールを作成しました。
File :: Findのコントラクトは、渡される情報を指定します&wanted
。
必要な関数は引数を取りませんが、変数のコレクションを介して機能します。
$File::Find::dir
現在のディレクトリ名です。$_
そのディレクトリ内の現在のファイル名です$File::Find::name
ファイルへの完全なパス名です。
コールバックで利用できるようにしたい追加情報がある場合は、必要なパラメーターを使用して必要なサブを呼び出すサブ参照を作成できます。