可能重复:
How do I pass parameters to the File::Find subroutine that processes each file?
可以像这样使用Perl的File::Find模块:
find( \&wanted, @directories);
我们如何向wanted
函数添加参数?
例如,我想遍历/tmp
中的文件,从每个文件中提取一些信息,结果应该存储到不同的目录中。输出目录应作为参数给出。
答案 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。