我正在尝试在我的linux系统上打印perl数组中提到的路径。如何添加一个数组元素,该元素将打印以cox/m3
开头并具有名为foo
use strict;
use warnings;
my @excludepaths = (
"abc/def/",
"hij/klm/",
"cox/m3/*/foo/",
);
foreach (@excludepaths) {
print "$_\n";
}
exit 1;
当前输出:
abc/def/
hij/klm/
cox/m3/*/foo/
期望的输出:
abc/def/
hij/klm/
cox/m3/fsdf/dsgsdfg/fgf/foo/
cox/m3/weret/wer/foo/
答案 0 :(得分:2)
use strict;
use warnings;
my @excludepaths = (
"abc/def/",
"hij/klm/",
"cox/m3/*/foo/",
);
chdir '/path/to/root/dir';
foreach my $path (@excludepaths) {
foreach (glob $path) {
print "$_\n";
}
}
答案 1 :(得分:0)
你遇到的问题是 - 你根本没有进行任何目录搜索。所以你所要做的就是打印数组元素,这就是为什么你得到的东西。
如果您想使用“shell style”语法进行扩展,那么您需要glob
。但我建议 - 考虑使用File::Find
并使用正则表达式:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my @excludepaths = qw (
abc/def/
hij/klm/
cox/m3/.*/foo/
);
## NB - switched to regular expression, not '*'
my $is_match = join ( "|", map { quotemeta } @excludepaths );
$is_match = qr/($is_match)/;
sub print_if_match {
return unless -d;
if ( $File::Find::name =~ m/$is_match/ ) {
print "$File::Find::name\n";
}
}
find ( \&print_if_match, "/path/to/search", "../path_to_search/2" );