无法在Windows平台中使用Perl列出包含空间的目录

无法在Windows平台中使用Perl列出包含空间的目录,perl,glob,Perl,Glob,为了在Windows中列出路径,我编写了以下Perl函数(在草莓运行时环境下执行) 子列表路径 { 我的$path=shift; my@list=glob“$path/*”; #我的@list=; 我的@paths=grep{-d和$une.”和$ne.“}@list; } 但它无法正确解析包含空格的目录,例如: 当我发布以下代码时: listpath(“e:/test/test1/test11/test111/test1111/test11111-Copy”) 函数返回一个包含两个元素的数组

为了在Windows中列出路径,我编写了以下Perl函数(在草莓运行时环境下执行)

子列表路径
{
我的$path=shift;
my@list=glob“$path/*”;
#我的@list=;
我的@paths=grep{-d和$une.”和$ne.“}@list;
}
但它无法正确解析包含空格的目录,例如:

当我发布以下代码时: listpath(“e:/test/test1/test11/test111/test1111/test11111-Copy”)

函数返回一个包含两个元素的数组:

1:e:/test/test1/test11/test111/test1111/test11111 2:-

我想知道glob是否可以解析上面的空间目录。非常感谢。

请尝试:


即使这个话题很久以前就有了答案,我最近也遇到了同样的问题,快速搜索给了我另一个解决方案,来自(上次回复):


但是更喜欢
bsd_glob
,它还支持一些其他整洁的功能,例如字符类的
[]

问题是关于Windows平台,Bentoy13的解决方案不起作用,因为反斜杠会被误认为是路径分隔符

如果出于任何原因您不想使用bsd_glob,这里有一个选项:将路径的攻击部分用双引号括起来。这可以是一个目录名(
path\\”到我的“\\file.txt
),也可以是多个目录名(
“path\\”到我的“\\file.txt
)。斜杠而不是反斜杠通常也能起作用。当然,它们不必包含空间,因此这里的方法始终有效:

my @list = glob "\"$path\"/*";

记住,这是一个Windows解决方案。它是否在Linux下工作取决于上下文。

仅用于记录:从最新文档开始,不鼓励使用导出标志
:glob
,首选
:bsd\u glob
use File::Glob ':glob';
my @list = bsd_glob "$path/*";
my $path = shift;
$path =~ s/ /\\ /g;
my @list = glob "$path/*";
my @list = glob "\"$path\"/*";