可以像这样使用 Perl 的File::Find模块:
find( \&wanted, @directories);
我们如何向wanted
函数添加参数?
例如,我想遍历文件/tmp
从每个文件中提取一些信息,并将结果存储到不同的目录中。输出目录应作为参数给出。
可以像这样使用 Perl 的File::Find模块:
find( \&wanted, @directories);
我们如何向wanted
函数添加参数?
例如,我想遍历文件/tmp
从每个文件中提取一些信息,并将结果存储到不同的目录中。输出目录应作为参数给出。
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': $!";
}
您可以创建您喜欢的任何类型的代码参考。您不必使用对命名子例程的引用。有关如何执行此操作的许多示例,请参阅我的File::Find::Closures模块。我创建了该模块来准确回答这个问题。
File::Find的合约指定传递给 的信息&wanted
。
想要的函数不接受任何参数,而是通过一组变量来完成它的工作。
$File::Find::dir
是当前目录名,$_
是该目录中的当前文件名$File::Find::name
是文件的完整路径名。
如果您想在回调中提供额外的信息,您可以创建一个子引用,使用所需的参数调用您想要的子引用。