当我尝试在Windows上运行Perl单线程时,为什么我在"-e第1行的EOF之前的任何地方"找到"找不到字符串终结符"?

R.D*_*R.D 13 windows perl cmd

我试图在Windows 5.14.2上运行以下

C:\Perl>perl -e 'print "Hello World \n"'
Can't find string terminator "'" anywhere before EOF at -e line 1.

我错过了什么?

cjm*_*cjm 28

你错过了一个体面的shell,它具有明智且定义明确的引用规则.在Windows上,只有双引号被视为引用,并且转义规则定义不明确且不一致.尝试:

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

我强烈建议除了Windows上最简单的单行之外的任何东西.(Windows one-liners的另一个问题是Windows shell不会扩展通配符.如果*.txt在命令行上使用它,它将查找一个名为字面的文件*.txt.稍后你会遇到这个问题.)

在Windows上,您键入的内容相当于:

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

也就是说,Perl的正试图执行的代码是'print@ARGV含有单个字符串Hello World \n'.(这不是换行符,后面是反斜杠n).

  • 实际上,我认为你是夸大其词.在Windows中,我从来没有感到过于残缺的写作. (3认同)
  • @HarryJohnston,在Windows上,Pe​​rl根据Windows规则解析命令行.(相反,Perl链接的C库根据Windows规则解析命令行.)单行使用Unix shell引用规则编写,这在Windows上不起作用. (2认同)