Linux上的Perl oneliner中的单引号行为

为什么第二个class轮工作,尽pipe单引号呢?

perl -wE 'say('Hello')' # Name "main::Hello" used only once: possible typo at -e line 1. # say() on unopened filehandle Hello at -e line 1. perl -wE 'say length('Hello')' # 5 

在shell命令中, 'abc'defabc'def'abcdef'abcdef'都是等价的,所以'...'Hello'...''...Hello...'是一样'...Hello...'


perl -wE 'say('Hello')' ,你的shell调用

 exec("perl", "-wE", "say(Hello)") 

如果say的第一个参数是空白字符,并且没有用这个名字声明sub,则空白字符将用作文件句柄。


perl -wE 'say length('Hello')' ,你的shell调用

 exec("perl", "-wE", "say length(Hello)") 

如果找到一个裸字,那么这个名字就没有声明子类,不需要文件句柄,下一个标记不是=> ,而是use strict 'subs'; 没有效果,裸号是一个字符串文字,返回自己。


解决方案:

 perl -wE 'say("Hello")' # exec("perl", "-wE", "say(\"Hello\")") perl -wE 'say(q{Hello})' # exec("perl", "-wE", "say(q{Hello})") perl -wE 'say('\''Hello'\'')' # exec("perl", "-wE", "say('Hello')") 

请注意, perl不需要代码是一个单独的参数。

 perl -wE'say("Hello")' # exec("perl", "-wEsay(\"Hello\")") perl -wE'say(q{Hello})' # exec("perl", "-wEsay(q{Hello})") perl -wE'say('\''Hello'\'')' # exec("perl", "-wEsay('Hello')")