我想在目录和子目录中列出文件。我使用perl File :: Find。我可以将结果存储到数组中吗?
这是代码
use warnings;
use strict;
use File::Find;
my $location="tmp";
sub find_txt {
my $F = $File::Find::name;
if ($F =~ /txt$/ ) {
push @filelist, $F;
return @filelist;
}
}
my @fileInDir = find({ wanted => \&find_txt, no_chdir=>1}, $location);
print OUTPUT @fileInDir
上面的代码不显示输出
答案 0 :(得分:3)
当然,只需push
到在外部声明的数组中即可:
use warnings;
use strict;
use File::Find;
my $location = "tmp";
my @results;
my $find_txt = sub {
my $F = $File::Find::name;
if ($F =~ /txt$/ ) {
push @results, $F;
}
};
find({ wanted => $find_txt, no_chdir=>1}, $location);
for my $result (@results) {
print "found $result\n";
}
wanted
回调is ignored的返回值。 find
本身也没有记录或有用的返回值。
答案 1 :(得分:1)
对于后代,使用Path::Iterator::Rule更简单。
use strict;
use warnings;
use Path::Iterator::Rule;
my $location = 'tmp';
my $rule = Path::Iterator::Rule->new->not_dir->name(qr/txt$/);
my @paths = $rule->all($location);
答案 2 :(得分:0)
替换
my @fileInDir = find({ wanted => \&find_txt, no_chdir=>1}, $location);
使用
my @fileInDir;
find({ wanted => sub { push @fileInDir, find_txt(); }, no_chdir=>1 }, $location);
并添加缺少的内容
return;
aka
return ();
到find_txt
。与先前答案中的解决方案不同,这使您可以使用可重复使用且位置方便的“所需”子。