Function print与三元条件算子之间的奇怪相互作用

Function print与三元条件算子之间的奇怪相互作用,function,perl,expression,Function,Perl,Expression,遇到了print和三元条件运算符之间的奇怪交互,我不理解。如果我们这样做 打印“foo”。(1)‘是’:‘否’。’巴' …然后我们得到输出…: foo,是条 …正如我们所料。但是,如果我们这样做 打印(1?'yes':'no')。'巴' …然后我们就得到输出…: 是 在第二种情况下,为什么不将“bar”附加到输出中呢?让我们这样做吧,但这是真的——也就是说,警告打开了 perl -we'print (1 ? "yes" : "no") . " bar"' 它打印 print (...) int

遇到了
print
和三元条件运算符之间的奇怪交互,我不理解。如果我们这样做

打印“foo”。(1)‘是’:‘否’。’巴'

…然后我们得到输出…:

foo,是条

…正如我们所料。但是,如果我们这样做

打印(1?'yes':'no')。'巴'

…然后我们就得到输出…:


在第二种情况下,为什么不将“bar”附加到输出中呢?

让我们这样做吧,但这是真的——也就是说,警告打开了

perl -we'print (1 ? "yes" : "no") . " bar"'
它打印

print (...) interpreted as function at -e line 1. Useless use of concatenation (.) or string in void context at -e line 1. yes 或者,调用
print
as函数,并使用全括号

perl -we'print( (1 ? "yes" : "no") . " bar", "\n" )'
在这两种情况下我都添加了换行符


有关相关示例和精确文档链接的详细讨论,请参阅。

让我们这样做吧,但这是真实的,即在

perl -we'print (1 ? "yes" : "no") . " bar"'
它打印

print (...) interpreted as function at -e line 1. Useless use of concatenation (.) or string in void context at -e line 1. yes 或者,调用
print
as函数,并使用全括号

perl -we'print( (1 ? "yes" : "no") . " bar", "\n" )'
在这两种情况下我都添加了换行符


有关相关示例和精确文档链接的详细讨论,请参阅。

如果函数名后的第一个非空白字符是一个左括号,则Perl将其解释为函数参数列表的开始,匹配的右括号将用作参数列表的结尾。这是
使用警告
将告诉您的内容之一

通常的解决方法是在左括号前插入一个
+

$ perl -e "print (1 ? 'yes' : 'no') . ' bar'"
yes
$ perl -e "print +(1 ? 'yes' : 'no') . ' bar'"
yes bar

如果函数名后的第一个非空白字符是一个左括号,那么Perl将把它解释为函数参数列表的开始,匹配的右括号将用作参数列表的结尾。这是
使用警告
将告诉您的内容之一

通常的解决方法是在左括号前插入一个
+

$ perl -e "print (1 ? 'yes' : 'no') . ' bar'"
yes
$ perl -e "print +(1 ? 'yes' : 'no') . ' bar'"
yes bar
第一种形式是
(打印(1?'yes':'no')。'条形图“
,但您正在查找打印((1?'yes':'no')。'bar')
--。第一种形式是
(打印(1?'yes':'no')。'条形图“
,但您正在查找打印((1?'yes':'no')。'bar')
--。