尝试在命令窗口中运行一个简单的perl脚本并收到错误:string terminator "'" anywhere before EOF at -e line 1
。
perl -e 'print "Hello World";'
我做错了什么?
答案 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标准化的。