【问题标题】:Perl: Dereferencing a hash ref into a scalar? [duplicate]Perl:将哈希引用解引用为标量? [复制]
【发布时间】:2014-02-13 14:42:48
【问题描述】:

为什么将哈希引用解引用为哈希并将其分配给标量会给出不相关的值(至少对我而言)?

代码:

my $hash = {
        1 => 9,
        2 => 10,
        3 => 11,
        4 => 12,
        5 => 13,
        6 => 14,
        7 => 15,
        8 => 16,
       };

my $dereferenced = %$hash;

print $dereferenced;

Perl 版本:5.12.4

操作系统:Windows 7

打印的值为

7/16

它是否与 Perl 内部有关?

【问题讨论】:

  • 您希望$dereferenced 包含什么内容?
  • 我的 $dereferenced = %$hash;
  • 谢谢!抱歉,我发布了重复的问题!现在我明白了 Bucket 的总大小 = 16。包含一个或多个元素的 Bucket 的数量 = 7。因此是 7/16。这个哈希似乎有更多的冲突!
  • @Borodin:我曾想过以下不同的方向。我们可以将哈希定义为 %hash=(1,2,3,4)。它实际上意味着 (1=>2, 3=>4)。同样,取消引用哈希引用也应该返回相同类型的数组(如果 LValue 不是哈希)。在这种情况下(1、9、2、10、3、11 等)。因此,将此返回的数组分配给标量与计算数组长度($length = @array)相同。

标签: perl hash dereference


【解决方案1】:

标量不能包含哈希或数组,只能引用它们。

但即使他们可以,当您在标量赋值的右侧使用散列时,它在 标量上下文 中,并且标量上下文中的散列会产生如果散列为空,则返回 false,否则在散列中描述存储桶使用情况的字符串(例如“7/32”)。

【讨论】:

  • 尽管我在 perl 上工作了很长时间,但我不知道 perl 中的散列概念是如何工作的。很高兴知道名为“桶”的新术语。谢谢!
  • @InnovWelt 术语 Bucket 在了解 scalar context的含义的同时对成为更好的 Perl 程序员没有多大帮助> 是。
猜你喜欢
  • 2017-01-06
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多