为了在Windows中列出pathes,我写了下面的Perl函数(在StrawBerry运行时环境下执行)。
sub listpath
{
my $path = shift;
my @list = glob "$path/*";
#my @list = <$path/*>;
my @pathes = grep { -d and $_ ne "." and $_ ne ".." } @list;
}
但它无法正确解析包含空格的目录,例如:
当我发出以下代码时: listpath(“e:/ test / test1 / test11 / test111 / test1111 / test11111 - Copy”);
该函数返回一个包含两个元素的数组:
1:e:/ test / test1 / test11 / test111 / test1111 / test11111 2: -
我想知道glob是否可以解析空间目录。非常感谢。
答案 0 :(得分:19)
请尝试bsd_glob
:
use File::Glob ':glob';
my @list = bsd_glob "$path/*";
答案 1 :(得分:2)
即使主题很久以前已被回答,我最近遇到了同样的问题,快速搜索给了我另一个解决方案,来自perlmonks(最后回复):
my $path = shift;
$path =~ s/ /\\ /g;
my @list = glob "$path/*";
但更喜欢bsd_glob
,它还支持其他一些简洁的功能,例如[]
用于字符类。
答案 2 :(得分:1)
问题在于Windows平台,其中Bentoy13的解决方案不起作用,因为反斜杠会被误认为路径分隔符。
如果出于任何原因你不想使用bsd_glob,这是一个选项:用双引号包装路径的攻击性部分。这可以是一个目录名称(path\\"to my"\\file.txt
)或多个目录名称("path\\to my"\\file.txt
)。斜杠而不是反斜杠通常也有效。当然,他们 不包含空格,所以这里总是有效:
my @list = glob "\"$path\"/*";
记住,这是一个Windows解决方案。它是否在Linux下运行取决于上下文。