6

可能重复:
如何将参数传递给处理每个文件的 File::Find 子例程?

可以像这样使用 Perl 的File::Find模块:

find( \&wanted, @directories);

我们如何向wanted函数添加参数?

例如,我想遍历文件/tmp从每个文件中提取一些信息,并将结果存储到不同的目录中。输出目录应作为参数给出。

4

3 回答 3

10

You use a closure:

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 回答