对结果列表的评估在标量和列表上下文中看起来不一致。如下面的代码片段所示,在列表上下文中评估赋值操作(=)的左侧,但在标量上下文中评估右侧的列表。这是预期和任何语言原则来解释这种行为吗?
print (($k, $v) = (3, 4, 5)); # output is 34
print scalar (($k, $v) = (3, 4, 5)); # output is 3
答案 0 :(得分:5)
与做完全不同的事情并不矛盾。
perl中的每个运算符在列表和标量上下文中都有一个已定义的行为,它们通常是完全不同的。在列表赋值的情况下,在列表上下文中,它返回其左操作数,而在标量上下文中,它返回其右操作数中的元素计数。
请注意,这意味着这样的工作:
while ( my ($k,$v) = each %hash ) {
答案 1 :(得分:4)