6

重複の可能性:
各ファイルを処理するFile :: Findサブルーチンにパラメーターを渡すにはどうすればよいですか?

次のようなPerlのFile::Findモジュールを使用できます。

find( \&wanted, @directories);

関数にパラメータを追加するにはどうすればよいwantedですか?

たとえば、/tmp各ファイルからいくつかの情報を抽出する際にファイルをトラバースしたいので、結果を別のディレクトリに保存する必要があります。出力ディレクトリはパラメータとして指定する必要があります。

4

3 に答える 3

10

クロージャーを使用します。

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': $!";
  }
于 2010-02-02T13:32:20.713 に答える
4

好きな種類のコード参照を作成できます。名前付きサブルーチンへの参照を使用する必要はありません。これを行う方法の多くの例については、私のFile :: Find::Closuresモジュールを参照してください。この質問に正確に答えるために、そのモジュールを作成しました。

于 2010-02-02T12:00:23.007 に答える
3

File :: Findのコントラクトは、渡される情報を指定します&wanted

必要な関数は引数を取りませんが、変数のコレクションを介して機能します。

  • $File::Find::dir現在のディレクトリ名です。
  • $_そのディレクトリ内の現在のファイル名です
  • $File::Find::nameファイルへの完全なパス名です。

コールバックで利用できるようにしたい追加情報がある場合は、必要なパラメーターを使用して必要なサブを呼び出すサブ参照を作成できます。

于 2010-02-02T10:58:37.937 に答える