Perl中赋值运算符的结果列表的评估不一致?

时间:2014-12-05 02:55:30

标签: perl activeperl

对结果列表的评估在标量和列表上下文中看起来不一致。如下面的代码片段所示,在列表上下文中评估赋值操作(=)的左侧,但在标量上下文中评估右侧的列表。这是预期和任何语言原则来解释这种行为吗?

print (($k, $v) = (3, 4, 5)); # output is 34
print scalar (($k, $v) = (3, 4, 5)); # output is 3

2 个答案:

答案 0 :(得分:5)

与做完全不同的事情并不矛盾。

perl中的每个运算符在列表和标量上下文中都有一个已定义的行为,它们通常是完全不同的。在列表赋值的情况下,在列表上下文中,它返回其左操作数,而在标量上下文中,它返回其右操作数中的元素计数。

请注意,这意味着这样的工作:

while ( my ($k,$v) = each %hash ) {

答案 1 :(得分:4)

这只是语义被定义的问题。

这是perldoc perlop

  

类似地,列表上下文中的列表赋值会生成列表       分配给的左值和标量上下文中的列表赋值返回       由右边的表达式产生的元素数量       任务。