使用 Perl 的 File::Find 时如何将参数传递给所需的函数?

发布于 2024-08-20 03:25:00 字数 537 浏览 7 评论 0原文

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

可以使用 Perl 的 File: :Find 模块如下:

find( \&wanted, @directories);

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

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

Possible Duplicate:
How do I pass parameters to the File::Find subroutine that processes each file?

One can use Perl's File::Find module like this:

find( \&wanted, @directories);

How can we add a parameter to the wanted function?

For example, I want to traverse the files in /tmp extracting some information from each file and the result should be stored to a different directory. The output dir should be given as a parameter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请爱~陌生人 2024-08-27 03:25:00

您使用闭包:

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': $!";
  }

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': $!";
  }
萌︼了一个春 2024-08-27 03:25:00

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

You can create any sort of code reference you like. You don't have to use a reference to a named subroutine. For many examples of how to do this, see my File::Find::Closures module. I created that module to answer precisely this question.

夏至、离别 2024-08-27 03:25:00

File::Find 的合约指定了传递给 &想要

所需的函数不接受任何参数,而是通过变量集合来完成其工作。

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

如果您想在回调中提供额外的信息,您可以 创建一个子引用,使用所需的参数调用您想要的子

File::Find's contract specifies what information is passed to &wanted.

The wanted function takes no arguments but rather does its work through a collection of variables.

  • $File::Find::dir is the current directory name,
  • $_ is the current filename within that directory
  • $File::Find::name is the complete pathname to the file.

If there is extra information you want to make available in the callback, you can create a sub reference that calls your wanted sub with the desired parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文