使用Perl的File :: Find时,如何将参数传递给想要的函数?

时间:2010-02-02 10:51:48

标签: perl file-find

  

可能重复:
  How do I pass parameters to the File::Find subroutine that processes each file?

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

find( \&wanted, @directories);

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

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

3 个答案:

答案 0 :(得分: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': $!";
  }

答案 1 :(得分:4)

您可以创建任何类型的代码引用。您不必使用对命名子例程的引用。有关如何执行此操作的许多示例,请参阅我的File::Find::Closures模块。我创建了该模块来准确回答这个问题。

答案 2 :(得分:3)

File::Find的合同规定了传递给&wanted的信息。

  

想要的函数不带参数,而是通过变量集合来完成它。

     
      
  • $File::Find::dir是当前目录名
  •   
  • $_是该目录中的当前文件名
  •   
  • $File::Find::name是文件的完整路径名。
  •   

如果您想在回调中提供额外信息,可以create a sub reference that calls your wanted sub with the desired parameters