为什么perl oneliner输出取决于开关位置

为什么perl oneliner输出取决于开关位置,perl,Perl,您能解释一下为什么perl开关-en不起作用,而-ne工作正常吗 $ echo 123|perl -en 'print"$_"' $ echo 123|perl -ne 'print "$_"' 123 $ 您能否提供一个到描述这种行为的文档的链接?之后-e必须遵循perl代码,但它只遵循n,这不是实际的一行代码,因此-en不能像您期望的那样工作 如果您使用-w启用警告,它将提示您: echo 123|perl -wen 'print"$_"' 这是您需要的文档 您可以在这里找到概要(前

您能解释一下为什么perl开关
-en
不起作用,而
-ne
工作正常吗

$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$ 

您能否提供一个到描述这种行为的文档的链接?

之后
-e
必须遵循perl代码,但它只遵循
n
,这不是实际的一行代码,因此
-en
不能像您期望的那样工作

如果您使用
-w
启用警告,它将提示您:

echo 123|perl -wen 'print"$_"'

这是您需要的文档

您可以在这里找到概要(前面提到的
-n
-e
用粗体表示):

perl[-sTtuUWX][-hv][-cw][-d[t][:debugger][-d[number/list][-strong>[-pna][-Fpattern][-l[octall][-0[octall/hexadecimal][-Idir][-m[-]模块][-m[-]模块][-f][-C[number/list][-S][-x[dir-i][-i[extension]-e][-e][-e][-e][-e][-e][-e][[程序文件][参数]


因此,从上面可以看出,
-e
开关在被调用后需要一个
'command'
,使得
-ne'command'
有效,而
-en'command'
无效。

每当Perl解释器看到-e选项时,它需要跟随一行程序特定代码行的任何其他选项必须在-e选项之前,否则解释器会混淆。简而言之,解释器会将-e之后的任何选项视为执行命令。请记住,可以在一行中使用多个-e

perl -e "print qq(Hello\n);" -e"print qq(World\n)"
                               ^  
                             Not space needed here.
#Output
Hello
World 

当一个开关需要一个紧跟在直接右边的参数时,你只能将该参数放在直接右边。当“e”开关出现时,在“e”开关后面加一个“n”switch要求在之后立即使用一个参数,这不可能是您想要的。您关于
'command'
需要立即遵循
-e
的观点是有效的。您关于选项顺序的观点需要模仿它们在概要中出现的顺序,这是一种误导。为什么您说“此处不需要空间”?在我的带有Perl v5.10.1的ubuntu系统上,它可以使用空格,也可以不使用空格。@bessarabov-我想说的是,由于-e修饰符后面不需要空格,所以它会将它后面的任何内容都视为一个要执行的命令(即使接下来是一个选项)。@edi allen,哦,现在我明白了。谢谢你的解释。
perl -e "print qq(Hello\n);" -e"print qq(World\n)"
                               ^  
                             Not space needed here.
#Output
Hello
World