scalar EXPR

强制将 EXPR 解释为标量上下文并返回 EXPR 的值。

my @counts = ( scalar @a, scalar @b, scalar @c );

没有等效的操作符来强制表达式在列表上下文中进行插值,因为在实践中,这永远不需要。但是,如果你真的想这样做,可以使用 @{[ (some expression) ]} 结构,但通常简单的 (some expression) 就足够了。

因为 scalar 是一个一元操作符,如果你不小心对 EXPR 使用了带括号的列表,这将表现为一个标量逗号表达式,在空上下文下计算除最后一个元素以外的所有元素,并返回在标量上下文下计算的最后一个元素。这很少是你想要的。

以下单一语句

print uc(scalar(foo(), $bar)), $baz;

在道德上等同于以下两个语句

foo();
print(uc($bar), $baz);

有关一元操作符和逗号操作符的更多详细信息,请参阅 perlop,有关在标量上下文下计算哈希的详细信息,请参阅 perldata