我想运行一个perl脚本来只查找目录中的子目录.我不想拥有"." 和".."返回.
我试图使用的程序如下所示:
use warnings;
use strict;
my $root = "mydirectoryname";
opendir my $dh, $root
or die "$0: opendir: $!";
while (defined(my $name = readdir $dh)) {
next unless -d "$root/$name";
print "$name\n";
}
Run Code Online (Sandbox Code Playgroud)
然而,这个输出有"." 和"......".如何从列表中排除它们?
Sam*_*kri 12
如果要将dirs收集到数组中:
my @dirs = grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
Run Code Online (Sandbox Code Playgroud)
如果你真的只想打印dirs,你可以这样做:
print "$_\n" foreach grep {-d "$root/$_" && ! /^\.{1,2}$/} readdir($dh);
Run Code Online (Sandbox Code Playgroud)
小智 8
next unless $name =~ /^\.\.?+$/;
Run Code Online (Sandbox Code Playgroud)
此外,模块File :: Find :: Rule为这类事物提供了一个很好的界面.
use File::Find::Rule;
my @dirs = File::Find::Rule->new
->directory
->in($root)
->maxdepth(1)
->not(File::Find::Rule->new->name(qr/^\.\.?$/);
Run Code Online (Sandbox Code Playgroud)