Win*_*ght 1 perl expression function
遇到print了我不明白的三元条件运算符之间的奇怪交互。如果我们这样做...:
print 'foo, ' . (1 ? 'yes' : 'no') . ' bar';
...然后我们得到输出...:
foo, yes bar
...正如我们所料。但是,如果我们这样做...:
print (1 ? 'yes' : 'no') . ' bar';
...然后我们就得到输出...:
yes
为什么在第二种情况下没有将“bar”附加到输出?
zdi*_*dim 10
让我们做吧,但要真实——也就是说,有警告
perl -we'print (1 ? "yes" : "no") . " bar"'
Run Code Online (Sandbox Code Playgroud)
它打印
print (...) 解释为 -e 第 1 行的函数。 在 -e 第 1 行的 void 上下文中无用地使用连接 (.) 或字符串。 是的
(但最后没有换行符)
因此,由于(1 ? "yes" : "no")被视为函数的参数列表,因此print将三元计算为yes,这就是 for 的参数print,因此单独打印。由于这是一个众所周知的“陷阱”,很容易出错,因此我们收到了警告。
然后将字符串" bar"连接起来(到它的返回值print是1),在 void 上下文中什么是无意义的,并且我们也会收到警告。
一种解决方法是添加 a +,强制解释()为表达式
perl -we'print +(1 ? "yes" : "no") . " bar", "\n"'
Run Code Online (Sandbox Code Playgroud)
或者,print使用完整的括号正确调用as 函数
perl -we'print( (1 ? "yes" : "no") . " bar", "\n" )'
Run Code Online (Sandbox Code Playgroud)
我在这两种情况下都添加了换行符。
有关相关示例和精确文档链接的详细讨论,请参阅此帖子。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |