【问题标题】:Why doesn't this Perl one-liner work on Windows?为什么这个 Perl 单行代码不能在 Windows 上运行?
【发布时间】:2018-03-10 14:16:41
【问题描述】:
尝试在命令窗口中运行一个简单的 Perl 脚本,但出现错误:
-e 第 1 行 EOF 之前任意位置的字符串终止符“'”
代码
perl -e 'print "Hello World";'
我做错了什么?
【问题讨论】:
-
-
如果您需要/想要在 Windows 上运行这样的单行代码,我建议安装 Cygwin:cygwin.com - 它为您提供了一个类似 unix 的环境,包括一个适当的 shell (bash) 和perl...
-
标签:
windows
perl
command-line
【解决方案1】:
哪个平台?如果是 Windows 和 CMD.EXE,那么各种事情都可能出错。在类 Unix 平台上,这应该可以正常工作。最后没有换行符,因此您的提示可能会以“Hello World”开头,但仅此而已。
加上注释是Windows,那么问题就在于Windows CMD.EXE 解析命令行的方式和Unix 不一样,不能简单的用单引号括住参数;你必须使用双引号。试试:
perl -e "print qq{Hello World\n}"
它对你有用的可能性不大。
【解决方案2】:
来自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 是命令外壳,
你可能会有更好的运气
这个:
perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
在 Mac 下,它
取决于你是什么环境
使用。 MacPerl shell 或 MPW 是
很像 Unix shell 的支持
对于几个引用变体,除了
它可以免费使用 Mac 的
非 ASCII 字符作为控制
字符。
使用qq()、q()和qx(),
而不是“双引号”,'单
引号'和backticks,可能会使
单行更容易写。有
所有这一切都没有通用的解决方案。它
一团糟。
【解决方案3】:
试试:perl -e " print 'Hello..'; "
这适用于 Windows CMD.EXE 控制台,其中引用不是 POSIX 标准化的。