为什么这个Perl单行程不能在Windows上运行?

时间:2010-12-04 05:00:12

标签: windows perl command-line

尝试在命令窗口中运行一个简单的perl脚本并收到错误:string terminator "'" anywhere before EOF at -e line 1

perl -e 'print "Hello World";'

我做错了什么?

3 个答案:

答案 0 :(得分:11)

哪个平台?如果它是Windows和CMD.EXE,那么各种各样的事情都可能出错。在类似Unix的平台上,这应该可以正常工作。最后没有新行,所以很可能你的提示似乎以“Hello World”开头,但就是这样。


由于评论它是Windows,那么麻烦的是Windows CMD.EXE不会像Unix一样解析命令行,你不能简单地在参数周围使用单引号;你必须使用双引号。尝试:

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

它有适合你的机会。

答案 1 :(得分:6)

来自perldoc perlfaq3 - Why don't Perl one-liners work on my DOS/Mac/VMS system?

  

通常是问题所在   这些系统上的命令解释器   有不同的想法   引用比Unix下的shell   哪个是单行编写的。上   有些系统,你可能需要改变   单引号加倍,其中   你不能在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是命令shell,   你可能会有更好的运气   这样:

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

在Mac下,它   取决于你是哪个环境   使用。 MacPerl shell,或MPW,是   就像支持Unix shell一样   对于几个引用变体,除了   它可以免费使用Mac   非ASCII字符作为控件   字符。

     

使用qq()q()qx(),   而不是“双引号”,“单一   引号'和backticks可能会产生   单行更容易编写。有   没有一般解决方案。它   是一团糟。

答案 2 :(得分:0)

尝试:perl -e " print 'Hello..'; " 这适用于Windows CMD.EXE控制台,其中引用不是POSIX标准化的。