【发布时间】:2014-12-05 02:55:29
【问题描述】:
结果列表的评估在标量和列表上下文中看起来不一致。如下代码 sn-p 所示,赋值操作 (=) 的左侧是在列表上下文中评估的,但右侧的列表是在标量上下文中评估的。这是预期的吗?有任何语言原则可以解释这种行为吗?
print (($k, $v) = (3, 4, 5)); # output is 34
print scalar (($k, $v) = (3, 4, 5)); # output is 3
【问题讨论】:
-
这是一个有趣的怪癖。如果您在标量列表之前插入一个数组,您可以获得预期的行为,例如
print scalar(@a = ($k,$v) = ...) -
@TLP,是的,对@a 的额外赋值按预期工作,因为最后评估的赋值运算符是@a 之后的运算符,并且它的左侧和右侧完全相同。记住这一点有点棘手。
-
您所说的预期行为是什么?
-
@ysth 输出应该是 2,而不是 3。
($k, $v)应该在标量上下文中返回 2。
标签: perl activeperl