我知道我可以这样做:
print STDOUT (split /\./, 'www.stackoverflow.com')[1];
和“stackoverflow”打印。但是,这个:
print +(split /\./, 'www.stackoverflow.com')[1];
做同样的事,并且:
print (split /\./, 'www.stackoverflow.com')[1];
是语法错误。那到底是怎么回事?我总是理解一元加号在任何情况下都不做任何事情。如果“print FILEHANDLE EXPR”有效,我会想象“打印EXPR”总能同样有效。任何见解?
答案 0 :(得分:16)
您没有启用警告。在print(...)[1]
的情况下,括号集被视为函数语法的一部分。
print (...) interpreted as function at C:\Temp\t.pl line 4.
来自,perldoc -f print:
另外注意不要使用左括号跟随print关键字,除非您希望相应的右括号终止print-interpose a
+
的参数或在所有参数周围加上括号。
答案 1 :(得分:8)
perldoc
的{{1}}包含此金块:
另外请注意不要使用print关键字 左括号,除非你想要相应的权利 括号来终止打印的参数 - 插入 一个“+”或括号括起所有参数。
print
总是在LIST上下文中计算其参数。
说
print
没问题。但是当你说
时print (split /\./, 'www.stackoverflow.com')
解析器在看到第一个print (split /\./, 'www.stackoverflow.com')[0]
后需要LIST,并在看到结束(
时认为LIST是完整的。 )
不会被解释为对任何内容进行操作,因此会出现语法错误。
[0]
<小时/>
其他可以将LIST作为第一个参数的Perl函数的行为方式相同:
print "abc","def"; # prints "abcdef"
print ("abc","def"); # prints "abcdef"
print ("abc"), "def"; # prints "abc"