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

Tho*_*son 3 perl activeperl

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

print (($k, $v) = (3, 4, 5)); # output is 34
print scalar (($k, $v) = (3, 4, 5)); # output is 3
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 5

做一些完全不同的东西并不矛盾.

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

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

while ( my ($k,$v) = each %hash ) {
Run Code Online (Sandbox Code Playgroud)