在标量上下文中评估Perl中的哈希的原因是什么?

10 perl hash scalar

我意识到在标量上下文中在Perl中计算数组是有用的:它会产生一些元素.

但是能够在标量上下文中评估哈希的实际用途是什么?例如

  • my $scalar_value = %hash;

  • scalar(%hash)

据我所知,它生成一个像" 3/4" 这样的字符串,提供有关散列内部的一些信息,这些信息似乎只对调试很有用.

DVK*_*DVK 14

它生成一个可用作TRUE/FALSE标志的值,以了解散列是否为空(无键).

举个例子:

if (%hash) {
    print "Hash has elements\n";
} else {
    print "Hash is empty\n";
}
Run Code Online (Sandbox Code Playgroud)

if 将表达式强制转换为标量上下文,因为它用作布尔表达式.

这与@array在标量上下文中用于测试空虚的概念非常相似:

if (@array) {
    # NOT empty!
}
Run Code Online (Sandbox Code Playgroud)

  • @tchrist - 当你的大脑拒绝看到`%h =(foo => undef)`时,你知道你和Perl合作的时间太长了,因为它似乎是一个看似合理的"空"哈希:) (5认同)
  • 这是因为`%h =(foo => undef)`意味着不同的标量,人们会变得很奇怪.和`@a =(undef)`一样怪异.每个都有一个有效的索引,虽然没有有效的值.所以它的关键数量很重要. (3认同)