我正在尝试列出仅在目录./a/b
或./a/d
中的文件。现在我使用(-d && $_ =~ "b") || (-d && $_ =~ "d")
明确指定。有什么办法可以把所需的文件夹放在一个数组中吗?
use File::Find;
my $filename = "h*.txt";
print ("Now it's:", $filename);
find({
wanted => \&wanted,
preprocess => \&dir_preprocess,
}, './a');
sub dir_preprocess {
my (@entries) = @_;
#my @tmparr=("d","b"); This isn't working
if ( $File::Find::dir eq './a' ) {
@entries = grep { (-d && $_ =~ "b") || (-d && $_ =~ "d") }@entries;
}
return @entries;
}
my @mylist;
sub wanted{
if($_ =~ $filename) {
push(@mylist, $_);
}
}
print ("It's:", @mylist);
答案 0 :(得分:2)
您可以在正则表达式中将|
用作“或”。 (-d && $_ =~ /(b|d)/)
将匹配b或d。您可以将名称放在数组中,然后使用join
生成所需的正则表达式。
你可能想做一些事情,比如将路径添加到那个深度,否则你可能会进入层次结构的不同层次。此外,您可以在末尾添加$
以表明它最后出现。