Perl中的字符串连接涉及函数的输出等

时间:2014-04-05 03:24:54

标签: perl string-concatenation

以下代码不输出任何内容:

print (1 == 2)."a";

就像这样:

print qw< One Two Three > . "a";

但是这会输出一个雪人,然后是字母a,如预期的那样:

print chr(0x2603)."a";

是否存在连接一般“事物”的一般方法,因为缺少一个更好的单词(例如函数输出和布尔比较的结果)和字符串片段总是有效?因为.运算符似乎不可靠。

1 个答案:

答案 0 :(得分:12)

由于列表和上下文在Perl中的工作方式,这是预期的行为。

发生了什么

该行

print (1 == 2)."a";

解析如下:

( print( 1 == 2 ) . "a" )

由于1==2返回一个空字符串,因此不打印任何内容。然后,print本身的返回值与a连接并丢弃。

如果你打开use warnings(你应该一直这样做,还有use strict)你会看到:

  

print(...)在-e line 1处被解释为函数   在-e第1行的void上下文中无用地使用连接(。)或字符串。

该行

print qw< One Two Three > . "a";

实际上是否会打印字符串Threea。这是因为qw< One Two Three >等同于表达式( 'One', 'Two', 'Three' )。连接运算符.将该表达式放在标量上下文中,标量上下文中逗号运算符的行为是返回其右侧操作数。因此表达式减少到Threea。同样,如果你有warnings,你会看到:

  

在-e line 1的void上下文中无用的常量(“One”)   在-e第1行的void上下文中无用的常量(“Two”)。

故事的寓意

use strict;
use warnings;