Как я могу путешествовать по каталогу с именем guid? - PullRequest
2 голосов
/ 29 июня 2011

Сегодня я написал скрипт на Perl в виде следующего кода:

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

Но он ничего не выводит.Когда я изменил путь guid с общим путем, таким как d :, это сработало.Зачем?Может ли Perl поддерживать путь, указанный в строке guid?

ОС: Windows 7 32-битная
Версия Perl: ActivePerl 5.12.3

Ответы [ 2 ]

5 голосов
/ 29 июня 2011
my @files = <\\{FF35B8A6-985C-4644-87B1-3FE83D1A50B\\}/*>;
print @files;

должно работать. Вам нужно заключить в кавычки специальные символы (здесь { и }).

Цитата из файла :: Glob

В системах DOSISH обратная косая черта является допустимым символом разделителя каталогов. В этом случае использование обратной косой черты в качестве символа кавычек (через GLOB_QUOTE) мешает использованию обратной косой черты в качестве разделителя каталогов. Лучшее (самое простое, наиболее переносимое) решение - использовать прямую косую черту для разделителей каталогов и обратную косую черту для цитирования. Однако это не соответствует "нормальной практике" в этих системах. Следовательно, в качестве уступки ожиданиям пользователя, обратные косые черты (в GLOB_QUOTE) заключают в кавычки только метасимволы глобусов '[', ']', '{', '}', '-', '~' и саму обратную косую черту. Все остальные обратные слеши проходят без изменений.

2 голосов
/ 29 июня 2011

Альтернатива использованию glob:

opendir my $fh, '.' or die $!; 
my @files = grep { -d } readdir $fh;
print @files;

Я предпочитаю более чистые версии perl глобусам, потому что глобусы не (для меня) не так строги, как perl naturals.Как было указано в другом ответе, glob использует другие метасимволы.

...