Использование perl в странностях Windows - PullRequest
1 голос
/ 04 мая 2011

У меня есть файл Windows Bat, (с использованием Activeperl)

@echo off
perl -p -e 's/DIV\[/div\[/g' orginal.txt > output.txt
perl -p -e 'rename("output.txt", "orginal.txt")';
...

Запуск файла .bat, и я просто не могу заставить его работать правильно ..

Can't open ;: No such file or directory, <> line 12248.
Can't find string terminator "'" anywhere before EOF at -e line 1.

Не уверен, что я делаю неправильно ..

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Вы не можете использовать одинарные кавычки для включения кода Perl в Windows. В результате вам нужно избегать двойных кавычек или найти другие альтернативы, такие как qq(...).

perl -pe "s/DIV\[/div\[/g" original.txt > output.txt
perl -pe "rename(qq(output.txt), qq/original.txt/)"

Обратите внимание, что в этом случае аргументы rename могут быть просто rename('a.txt', 'b.txt'), так как они являются литералами и интерполяция переменных не требуется.

1 голос
/ 04 мая 2011

Остальные постеры верны: Windows требует двойных кавычек для -e сценариев для perl, что часто приводит к ошибкам. Однако есть еще одна вещь, которую вы можете сделать: используйте переключатель -i, например так:

@echo off
perl -pi.bak -we "s/DIV\[/div\[/g" original.txt

Переключатель -i.bak отредактирует файл на месте - переименование не требуется - И он сохранит резервную копию файла в «original.txt.bak». Если вы не хотите создавать резервную копию, удалите часть ".bak" и просто используйте -pi.

1 голос
/ 04 мая 2011

Вы должны использовать двойные кавычки для цитирования текста программы в Windows cmd. В вашем примере вы можете просто изменить двойные и одинарные кавычки. В случаях, когда вам действительно нужны двойные кавычки в тексте perl, используйте qq {....} вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...