Вызывая форму команды dos Perl не работает должным образом после установки Chef

После установки Chef в Windows я обнаружил, что некоторые команды dos больше не работают в Perl, если они содержат косую черту. Например, бег `dir /AD .` в Perl теперь даст вам предупреждение dir: /AD: No such file or directory, Я знаю, что косая черта указывает на корень текущего рабочего каталога процесса chef-client. Но это действительно раздражает, это также влияет на Perl. Есть ли способ это исправить? Благодарю.

Дополнительная информация для выяснения проблемы: я использую довольно чистую 64-битную машину win7 с ActivePerl 5.8.8 и клиентом Chef 11.12.2-1. Проблема явно связана с установкой Chef. Во-первых, он включается и выключается, когда я устанавливаю и удаляю клиент Chef. Во-вторых, когда я бегу dir /, он перечисляет содержимое вложенной папки C:\opscode\chef\.

1 ответ

Chef не вызывает никаких проблем. Моя система отвечает так же на команду: my @dirs = `dir /AD .`, Это лечит /AD в качестве каталога вместо флага, выдавающего то же сообщение об ошибке "dir: /AD: No such file or directory" перед возвратом всех файлов в текущем каталоге.

Используя моб решение для комментариев my @dirs = `cmd /C dir /AD .` устраняет проблему и возвращает список каталогов по желанию.

Однако лучший способ решить эту проблему - сделать кросс-платформенный код на Perl совместимым, не полагаясь на встроенные функции ОС. Например, получить список каталогов в cwd легко, используя следующее:

my @dirs = grep -d, <*>;

Обновить

Я использую Strawberry Perl 5.18.2 на Windows 7 x64

C:\>perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for MSWin32-x64-multi-thread

Учитывая то, что вы рассказали о масштабах задачи, я думаю, что решение моба, вероятно, является вашим лучшим выбором. Да, было бы больно, чтобы заменить все эти backtick `` а также qx() звонки, но я не вижу лучшего варианта. Удачи в выяснении, если / как шеф-повар вызывает проблему. Больше нечего добавить.

Другие вопросы по тегам