Почему я получаю сообщение «Не могу найти терминатор строки» нигде до EOF в -e строке 1 », когда я пытаюсь запустить однострочную версию Perl в Windows? - PullRequest
13 голосов
/ 14 октября 2011

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

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

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

Ответы [ 4 ]

27 голосов
/ 14 октября 2011

Вам не хватает приличной оболочки с вменяемыми и четко определенными правилами цитирования.В 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).

4 голосов
/ 04 января 2013

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

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

должно быть:

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

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

2 голосов
/ 01 июля 2015

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

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

Я использую косую черту в своем операторе печати для отображения кавычек \ "

0 голосов
/ 19 апреля 2019

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

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

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