我怎样才能旅行用guid命名的目录?

时间:2011-06-29 11:56:25

标签: perl path guid

今天,我编写了一个perl脚本,如下面的代码:

my @files = <./{FF35B8A6-985C-4644-87B1-3FE83D1A50B}/*>;
print @files;

但它没有输出任何东西。当我用一般路径(如d:)更改guid路径时,它工作正常。为什么? perl可以支持用guid字符串命名的路径吗?

操作系统:Windows 7 32位
Perl版本:ActivePerl 5.12.3

2 个答案:

答案 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使用其他元字符。