Подтвердить что ты не робот

Почему я получаю "Не могу найти ограничитель строк" ​​ "где-нибудь перед EOF на -e строке 1", когда я пытаюсь запустить однострочный Perl в Windows?

Я пытаюсь запустить следующее в Windows с 5.14.2

C:\Perl>perl -e 'print "Hello World \n"'
Can't find string terminator "'" anywhere before EOF at -e line 1.

Что мне не хватает?

4b9b3361

Ответ 1

Вам не хватает достойной оболочки с разумными и четко определенными правилами цитирования. В Windows только двойная кавычка считается цитатой, а правила экранирования плохо определены и непоследовательны. Попробуйте:

perl -e "print qq{Hello World \n}"

Я настоятельно рекомендую избегать ничего, кроме самых простых однострочных в Windows. (Еще одна проблема с однострочными окнами Windows заключается в том, что оболочка Windows не расширяет подстановочные знаки. Если вы используете *.txt в командной строке, он будет искать файл с буквальным именем *.txt..)

В Windows то, что вы набрали, эквивалентно:

perl -e "'print" "Hello World \n'"

То есть, код Perl пытается выполнить 'print с @ARGV, содержащим единственную строку Hello World \n'. (Это не новая строка, обратная косая черта, за которой следует n).

Ответ 2

В Windows кавычки следует поменять местами. Итак, а не:

C:\Perl>perl -e 'print "Hello World \n"'

так должно быть:

C:\Perl>perl -e "print 'Hello World \n'"

(атрибуция Learning Perl, 6-е издание, стр. 295)

Ответ 3

Я также нашел, что это работает. Я использую Windows 7 с помощью c:\Windows\system32\cmd.exe

perl -e "$a=2; print(\"$a \n \");"

Я использую escape-слэш в своем заявлении для печати, чтобы получить кавычки\"

Ответ 4

В Windows работает следующая команда:

perl -e "print \"Hello world\""