Вызывая форму команды 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()
звонки, но я не вижу лучшего варианта. Удачи в выяснении, если / как шеф-повар вызывает проблему. Больше нечего добавить.