【发布时间】:2012-03-12 04:25:52
【问题描述】:
我意识到在标量上下文中评估 Perl 中的数组很有用:它会产生 # 个元素。
但是,能够在标量上下文中评估哈希的实际用途是什么?例如
my $scalar_value = %hash;scalar(%hash)
据我了解,它会生成一个类似“3/4”的字符串,提供有关哈希内部的一些信息,这些信息似乎仅对调试有用。
【问题讨论】:
-
数组是带有
@符号的变量,列表是源代码中的一系列项目。在这段代码中@array = (1, 2, 3),(1, 2, 3)是一个列表,@array是一个数组变量。 perlfaq4 包含更多信息:perldoc.perl.org/…? -
但是我不能写
scalar( 1,2,3,4 )吗?如果是这样,那么根据您的陈述,“列表”是正确的,不是吗? -
从技术上讲,标量上下文中不存在列表,您所拥有的是标量上下文中的逗号运算符,它首先计算 1,然后将其丢弃,然后是 2,然后是 3,最后是 4评估并返回。因此,您获得的不是列表的长度,而是逗号运算符评估的最后一个表达式。因此,在标量上下文中,
(a, b)表示evaluate a and throw it away, evaluate b and return it,而在列表上下文中,则表示evaluate a and push it onto the stack, evaluate b and push it onto the stack, return the stack -
我明白我的错误是什么。感谢您指出!如果我使用 qw() 会怎样?换句话说
scalar(qw(1 2 3 4))?那将是一个列表吗? -
qw在标量上下文中的行为方式与逗号运算符相同,它会丢弃除最终值之外的所有值,然后返回。如果编辑为“列表是源代码中的一系列项目(仅当该系列位于列表上下文中)”,我的第一个陈述可能会更清楚