我找到了背后的设计选择File::Find::find https://metacpan.org/module/File%3a%3aFind有点令人惊讶。我遇到过的例子都表明find
用在 void 上下文中。
The 文档 https://metacpan.org/module/File%3a%3aFind#The-wanted-function还澄清\&wanted
代码参考find( \&wanted, @dirs )
并不意味着是一个过滤器(强调我自己的):
The wanted()
函数执行您想要的任何验证each文件和目录。请注意,尽管有其名称,wanted()
function 是一个通用的回调函数,并且not tell
File::Find
是否“需要”某个文件。其实它的返回值
被忽略。
但是如果我确实想以类似于以下的方式将它用作过滤器怎么办grep http://perldoc.perl.org/functions/grep.html?我很想知道是否有另一种方法可以编写以下内容:
use strict;
use warnings;
use feature 'say';
use File::Find;
my $wanted = qr/^\d{2}_/; # e.g.
my @wanted;
find( sub { -f && /$wanted/ && push @wanted, $_ }, '.' );
# I wish my @wanted = find( ... ); worked
say for @wanted;
在 CPAN 上,我发现了几个 File::Find 的替代接口,旨在简化接口。
我会尝试File::Finder http://search.cpan.org/~merlyn/File-Finder-0.53/lib/File/Finder.pm,由著名 Perl 专家 Randal Schwartz 撰写,第一。
File::Find::Rule http://search.cpan.org/~rclamp/File-Find-Rule-0.33/lib/File/Find/Rule.pm是另一个。
(可以肯定地说,如果人们编写模块来执行此操作,则没有简单的内置方法可以执行此操作。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)