如何在数组中存储File :: Find :: name输出

时间:2018-04-06 02:44:40

标签: perl

我设法提取了.txt文件的文件名,但我在将其存储到数组中时遇到了问题。

文件名:

  

sample1.txt sample2.txt sample3.txt

代码:

sub find_files {
    my $getfile = $File::Find::name;

    if ($getfile =~ m/txt$/) {
         my @sample;

         ($file, $path, $ext) = fileparse($getfile, qr/\..*/);

         push(@sample, "$file");
         print "$sample[0] ";
     }
}

预期产出:

  

SAMPLE1

输出:

  

sample1 sample2 sample3

1 个答案:

答案 0 :(得分:3)

您将每个文件名存储在@sample中,但该范围的范围太小,并且在if块的末尾,print之后被丢弃。

这应该会更好。它也更简洁,并确保找到的项目是文件,而不是目录

my @sample;

sub find_files {

    return unless -f and /\.txt\z/i;

    my ($file, $path, $ext) = fileparse($File::Find::name, qr/\.[^.]*\z/);

    push @sample, $file;
}

find(\&find_files, '/my/dir');
print "$_\n" for @sample;