Почему этот однострочный Perl не работает в Windows? - PullRequest
4 голосов
/ 04 декабря 2010

Пытаюсь запустить простой Perl-скрипт в командном окне и получаю сообщение об ошибке:

терминатор строки "'" в любом месте перед EOF в строке -e 1

Код

perl -e 'print "Hello World";'

Что я делаю не так?

Ответы [ 3 ]

11 голосов
/ 04 декабря 2010

Какая платформа?Если это были Windows и CMD.EXE, то все могло пойти не так.На Unix-подобной платформе это должно работать нормально.В конце нет новой строки, поэтому, скорее всего, ваше приглашение будет начинаться с «Hello World», но это все.


С комментарием, что это Windows, проблема в том, что Windows CMD.EXE не анализирует командную строку так же, как Unix, и вы не можете просто использовать одинарные кавычки вокруг аргументов;Вы должны использовать двойные кавычки.Попробуйте:

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

Есть небольшой шанс, что он сработает для вас.

6 голосов
/ 04 декабря 2010

С perldoc perlfaq3 - Почему однострочные Perl не работают в моей системе DOS / Mac / VMS?

Проблема обычно заключается в том, что интерпретаторы команд наэти системы имеют довольно разные представления о цитировании, чем оболочки Unix, под которыми были созданы однострочники.В некоторых системах вам, возможно, придется изменить одинарные кавычки на двойные, что вы НЕ должны делать в системах Unix или Plan9.Возможно, вам также придется заменить один % на %%.Например:

# Unix (including Mac OS X)
perl -e 'print "Hello world\n"'

# DOS, etc.
perl -e "print \"Hello world\n\""

# Mac Classic
print "Hello world\n"
 (then Run "Myscript" or Shift-Command-R)

# MPW
perl -e 'print "Hello world\n"'

# VMS
perl -e "print ""Hello world\n"""

Проблема в том, что ни один из этих примеров не является надежным: они зависят от интерпретатора команд.Под Unix первые два часто работают.Под DOS вполне возможно, что ни один из них не работает.Если бы 4DOS была командной оболочкой, вам, вероятно, повезло бы вот так:

perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""

Под Mac это зависит от того, какую среду вы используете.Оболочка MacPerl, или MPW, во многом похожа на оболочку Unix, поскольку она поддерживает несколько вариантов цитирования, за исключением того, что она свободно использует символы Mac, не являющиеся ASCII, в качестве управляющих символов.* и qx() вместо «двойных кавычек», «одинарных кавычек» и backticks могут облегчить написание однострочников.Нет общего решения для всего этого.Это беспорядок.

0 голосов
/ 17 февраля 2015

Попробуйте: perl -e " print 'Hello..'; " Это работает в консоли Windows CMD.EXE, где цитирование не стандартизировано POSIX.

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