Perl - 扫描目录以查找包含的文件名和填充数组中的模式

Perl - Scan directory for pattern in contained filenames and fill array

我已经尝试编写一个简单的函数,它接受两个参数,输入目录和模式,以及 returns 一个数组,其中包含名称中包含模式的匹配文件。

my $dir = "/drives/D/Desktop/perlscripts";

sub getfiles
{
  my ($dirName, @patterns) = @_;
  opendir(my $dir, $dirName) or die "Can't open '$dirName': $!";
  my @return;
  for my $file (readdir($dir))
  {
    for my $pattern (@patterns)
    {
      if ($file =~ /$pattern/)
      { 
        print "$file \n";
        push @return, $file;
        # This avoids having the file in the result twice
        last;
      }
    }
   }

    return @return;
  }


 my @plscripts = getfiles($dir, "pl");
 print "@plscripts \n";

我在 STDOUT 中按原样没有得到任何代码,经过一些测试后,我认为问题出在 .

经过修改编辑:如您所见,我注释掉了#last;但是是的,它在每次迭代时都匹配每个文件名。所以我最终在数组中得到了重复的条目。

快速修复可以为您的第一个循环添加标签,然后将 "last" 更改为 "next FILE":

my $dir = "/drives/D/Desktop/perlscripts";

sub getfiles
{
  my ($dirName, @patterns) = @_;
  opendir(my $dir, $dirName) or die "Can't open '$dirName': $!";
  my @return;
  FILE:
  for my $file (readdir($dir))
  {
    for my $pattern (@patterns)
    {
      if ($file =~ /$pattern/)
      { 
        print "$file \n";
        push @return, $file;
        # This avoids having the file in the result twice
        # last
        next FILE;
      }
    }
   }

    return @return;
  }


 my @plscripts = getfiles($dir, "pl");
 print "@plscripts \n";