2015-06-05 3 views
0

У меня есть путь к каталогу, в общем дискесписок файлов в общем диске

\\remote\dir хранится в переменной $ PATH.

Мне нужен список всех файлов в каталоге dir1. Я использовал

my @files = glob($path."\\*"); 

@files пуст. Я попытался сбежать с косой чертой в $ path. Это тоже не сработало. Как получить список файлов в \\remote\dir?

Я нахожусь на Windows.

+0

Вы уверены, что вы не забыли, чтобы избежать обратной косой черты? В сумме должно быть четыре обратной косой черты перед пультом и два перед рельсом, потому что только половина из них пробивается в строку. Чтобы быть в безопасности, вы можете распечатать значение $ path на экране, я уверен, вы увидите что-то странное – Marged

+0

Работает с косой чертой под win7; 'perl -E" сказать для glob ('// localhost/Users/*') "' –

+0

@Marged OK Я смущен. Я не знаю, что изменилось, я думаю, что пропустил четыре обратной косой черты ... теперь это сработало. Я просто сделал $ path = ~ s/\\/\\\\/g; .... Благодаря!!!! Я думал, что попробовал это. Может быть, вы можете добавить ответ? – Mathai

ответ

1

Я думаю, вы просто должны изменить вашу программу следующим образом:

my $path = "\\\\remote\\dir"; 

Причина этого заключается в том, что Perl будет использовать обратную косую черту в качестве экранирующего символа. Если вы хотите иметь обратную косую черту в строке, вам придется избегать обратной косой черты второй косой чертой.

+1

Двойные тире для глобуса, затем снова или двойные кавычки, что означает, что вам нужно 4x косые черты, поэтому вам нужно '" \\\\\\\ remote \\\\ dir "' (для создания шаблона шара '\ \\\ remove \\ dir'), который можно укоротить до '' \\\\\\ remote \\ dir'' (который создает шаблон glob '\\\ remote \ dir'). То, что вы разместили, не работает; он будет выглядеть в '\ remote \ dir' на текущем диске. – ikegami

+0

@ikegami вы правы, я не знал о «специальном» поведении glob и просто помнил, что perl имеет ту же «проблему» с обратными косыми чертами, как C и Java. Я предлагаю, чтобы кто-то создал ответ, который рассматривает все то, что упоминалось в этом сообщении, и что этот стал принятым ответом. – Marged

2

Я считаю, что проще использовать слэши вместо побега обратную косую черту неоднократно:

my $path = "//dt01/users/steve"; 

my @files = glob($path."/desktop/*"); 

print "$_\n" for @files; 

Выход:

//dt01/users/steve/desktop/test.fil 
//dt01/users/steve/desktop/desktop.ini 
//dt01/users/steve/desktop/get-pip.py 
//dt01/users/steve/desktop/install-tl-20150223 
+0

Я думаю, что для perl это будет работать всегда, но в целом существует определенный «риск» при представлении косых черт к Windows. Я видел ситуации, когда команды (по общему признанию вне программы perl) терпели неудачу, потому что они не запускались с обратными косыми чертами – Marged