我发现背后的设计选择File::Find::find
有点令人惊讶。我遇到的所有示例都显示find
在无效上下文中。
该文档还澄清了\&wanted
coderef infind( \&wanted, @dirs )
并不意味着是一个过滤器(强调我自己的):
该
wanted()
函数对每个 文件和目录执行您想要的任何验证。请注意,尽管它的名称,该wanted()
函数是一个通用的回调函数,并且不告诉文件File::Find
是否“需要”。实际上,它的返回值被忽略了。
但是,如果我确实想以类似于的方式将其用作过滤器grep
怎么办?我很想知道是否有另一种写法:
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;