获取在Perl中具有类似命名模式的所有目录的名称

获取在Perl中具有类似命名模式的所有目录的名称,perl,unix,Perl,Unix,我有一个目录“logs”,其中包含子目录“A1”、“A2”、“A3”、“B1”、“B2”、“B3” 我想编写一个perl代码,搜索名称模式为“a”的所有子目录,即从字符a开始的所有目录名称 请帮助我。使用Perl核心模块: 更新: 如果要参数化前缀,可以执行以下操作: use strict; use warnings; use File::Find; my $prefix = 'B'; find(\&wanted, 'logs'); sub wanted { if(-d a

我有一个目录“logs”,其中包含子目录“A1”、“A2”、“A3”、“B1”、“B2”、“B3”

我想编写一个perl代码,搜索名称模式为“a”的所有子目录,即从字符a开始的所有目录名称

请帮助我。

使用Perl核心模块:

更新: 如果要参数化前缀,可以执行以下操作:

use strict;
use warnings;
use File::Find;

my $prefix = 'B';

find(\&wanted, 'logs');
sub wanted { 
    if(-d and /^$prefix/ ) {
       print $_, "\n"; 
    }
}

File::Find
对于简单地搜索一个目录来说是过分的
opendir
/
readdir
仍然有目的

此程序对指定目录执行
chdir
,因此无需从
readdir
生成的名称构建完整路径

要搜索的目录和所需前缀可以作为命令行参数传递,如果未提供,则默认为
logs
A

use strict;  
use warnings;
use autodie;

my ($dir, $prefix) = @ARGV ? @ARGV : qw/ logs A /;
chdir $dir;

my @wanted = do {
  opendir(my $dh, '.');
  grep { -d and /^\Q$prefix/ } readdir $dh;
};

print "$_\n" for @wanted;

它需要递归吗?@Barmar说的是子目录。我知道,但他需要找到子目录的子目录,以及子目录的子目录吗?@Barmer我只是想找到子目录。A1、A2、B1、B2等中没有其他子目录。。事实上,A1、A2、A3、B1、B2等都有很多文件。这确实有效。但我看到它变成了静态的。我们怎样才能使一个系统成为动态的。意味着我想用一个变量值来代替a。我们可以用if(-d和/^$val/)之类的东西吗{
use strict;  
use warnings;
use autodie;

my ($dir, $prefix) = @ARGV ? @ARGV : qw/ logs A /;
chdir $dir;

my @wanted = do {
  opendir(my $dh, '.');
  grep { -d and /^\Q$prefix/ } readdir $dh;
};

print "$_\n" for @wanted;