无法在Windows平台中使用Perl列出包含空间的目录
为了在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”) 函数返回一个包含两个元素的数组
子列表路径
{
我的$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\"/*";