今天,我编写了一个perl脚本,如下面的代码:
my @files = <./{FF35B8A6-985C-4644-87B1-3FE83D1A50B}/*>;
print @files;
但它没有输出任何东西。当我用一般路径(如d:)更改guid路径时,它工作正常。为什么? perl可以支持用guid字符串命名的路径吗?
操作系统:Windows 7 32位
Perl版本:ActivePerl 5.12.3
答案 0 :(得分:5)
my @files = <\\{FF35B8A6-985C-4644-87B1-3FE83D1A50B\\}/*>;
print @files;
应该有效。您需要引用特殊字符(此处为{
和}
)。
引自File :: Glob
在DOSISH系统上,反斜杠是一个有效的目录分隔符。在这种情况下,使用反斜杠作为引号(通过GLOB_QUOTE)会干扰使用反斜杠作为目录分隔符。最好(最简单,最便携)的解决方案是使用正斜杠表示目录分隔符,使用反斜杠表示引用。但是,这与这些系统上的“正常做法”不匹配。因此,作为对用户期望的让步,反斜杠(在GLOB_QUOTE下)仅引用glob元字符'[',']','{','}',' - ','〜'和反斜杠本身。所有其他反斜杠都会保持不变。
答案 1 :(得分:2)
使用glob的替代方法:
opendir my $fh, '.' or die $!;
my @files = grep { -d } readdir $fh;
print @files;
我更喜欢更纯粹的perl版本到globs,因为globs(对我来说)不像perl naturals那样严格。正如在另一个答案中指出的那样,glob使用其他元字符。