-
我想要匹配的模式是
*_name.txt
-
我要搜索的目录是$dir($dir有很多子目录,这就是为什么我需要
File::Find
而不是glob
-
我不打算使用
Find::Find::Rule
(我知道它有简单的代码,但是当我运行时,它有不存在的文件错误。 我不想在我的perl库中添加其他文件(
到目前为止,我拥有的语法是
use File::Find;
find(&store_foundfiles,$dir);
sub store_foundfiles {
my @string = *_name.txt;
#I DONT KNOW FROM HERE ON"
#I WANT TO IMPLEMENT THE FOLLOWING...
#FOREACH MATCH ON @string, STORE THE MATCH TO ARRAY '@found'
}
这个是因为大多数人可能应该使用File::Find::rule,即使你有理由不这样做:
use File::Find::Rule;
my @files = File::Find::Rule->file->name("*_name.txt")->in($dir);
use strict;
use warnings;
use File::Find;
my @found;
find(
sub {
push @found, $File::Find::name if /_name[.]txtz/;
# or push @found, $File::Find::name if substr($_, -9) eq '_name.txt';
},
$dir,
);
for my $file (@found) { ... }
数组在子例程之外声明,因此它保留在子例程的范围之外。如果你有大量的文件,你可能希望在遇到每个文件时处理它,而不是将它们全部存储在一个数组中并循环访问它(注意:某些操作不能懒惰地完成,如排序(。
$File::Find::name
被推送而不是$_
,因为绝对路径可能更有用。如果您只需要基本文件名,请按$_
。