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

Eri*_*ric 4 windows perl command-line

试图在命令窗口中运行一个简单的perl脚本并得到错误:__CODE__.

perl -e 'print "Hello World";'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Jon*_*ler 11

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


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

perl -e "print qq{Hello World\n}"
Run Code Online (Sandbox Code Playgroud)

它有适合你的机会.


Zai*_*aid 6

perldoc perlfaq3- 为什么Perl单行程不能在我的DOS/Mac/VMS系统上运行?

问题通常是这些系统上的命令解释器对于引用的想法与创建单行程序的Unix shell有相当不同的想法.在某些系统上,您可能必须将单引号更改为双引号,而在Unix或Plan9系统上则不能这样做.您可能还需要将单个更改%为a %%.例如:

# 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"""
Run Code Online (Sandbox Code Playgroud)

问题是这些例子都不可靠:它们依赖于命令解释器.在Unix下,前两个经常工作.在DOS下,完全有可能无法工作.如果4DOS是命令shell,你可能会有更好的运气:

perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
Run Code Online (Sandbox Code Playgroud)

在Mac下,它取决于您使用的环境.MacPerl shell(或MPW)很像Unix shell,它支持几种引用变体,除了它可以自由使用Mac的非ASCII字符作为控制字符.

使用qq(),q()qx(),而不是"双引号","单引号",和backticks,可以使单行更容易编写.所有这些都没有通用的解决方案.这是一团糟.