你能解释一下为什么 perl 开关-en
不起作用,但-ne
工作正常吗?
$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$
您能否提供描述此类行为的文档的链接?
你能解释一下为什么 perl 开关-en
不起作用,但-ne
工作正常吗?
$ echo 123|perl -en 'print"$_"'
$ echo 123|perl -ne 'print "$_"'
123
$
您能否提供描述此类行为的文档的链接?
After-e
必须遵循 perl 代码,但它只遵循n
不是实际的一个衬里,因此-en
不能按您期望的那样工作。
如果你启用警告,-w
它会给你一个提示:
echo 123|perl -wen 'print"$_"'
Unquoted string "n" may clash with future reserved word at -e line 1.
Useless use of a constant in void context at -e line 1.
每次 Perl 解释器看到-e选项时,它都希望后面有一行程序。这意味着特定代码行的任何其他选项都必须位于 -e 选项之前,否则解释器会感到困惑。简而言之,它将-e之后的任何选项视为要执行的命令。请记住,您可以在一行中使用多个 -e。
perl -e "print qq(Hello\n);" -e"print qq(World\n)"
^
Not space needed here.
#Output
Hello
World
Perlrun是您需要的文档。
在那里你可以找到概要(前面提到的粗体-n
和-e
):
perl [ -sTtuUWX ] [ -hv ] [ -V[:configvar] ] [ -cw ] [ -d[t][:debugger] ] [ -D[number/list] ] [ -pna ] [ -Fpattern ] [ -l[八进制] ] [ -0[八进制/十六进制] ] [ -Idir ] [ -m[-]module ] [ -M[-]'module...' ] [ -f ] [ -C [number/ list] ] [ -S ] [ -x[dir] ] [ -i[extension] ] [ [-e|-E] 'command' ] [ -- ] [ programfile ] [ argument ]...
因此,从上面可以看出,-e
switch 期望'command'
在被调用后立即出现 a,从而使-ne 'command'
有效和-en 'command'
无效。