强制将 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。