0

我正在尝试列出仅在目录./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);   
4

1 回答 1

2

您可以|在正则表达式中使用“或”。(-d && $_ =~ /(b|d)/)将匹配 b 或 d。您可以将名称放在一个数组中,然后使用它join来生成您需要的正则表达式。

您可能想要做一些事情,例如预先设置到达该深度的路径,否则您可能会处于不同层次的层次结构。您也可以$在末尾添加以表明它在末尾。

于 2013-08-16T07:45:52.937 回答