【发布时间】:2015-02-19 05:36:49
【问题描述】:
下面是 Perl 中的小脚本。每次我运行这段代码时,我都会得到不同的输出。
谁能帮我理解散列变量存储的基础知识,那就是如何为 Perl 的散列变量的键值对进行索引。
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@names = keys %data;
print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";
【问题讨论】:
-
我认为这是一个有趣的问题,因为 what 这意味着 Perl 正在做什么以及为什么这样做的微妙含义。然而,一般来说,哈希顺序是“不可靠的”,因此虽然它可能会暴露一个有趣的工件,但它是在一般的“不要那样做”类别下这样做的——这可能是导致投票失败的原因。跨度>
-
可重复的ideone.com/IXwgWz(添加了更多名称,因此不同的顺序更频繁地可见)
-
我不认为这是该问题的重复项(其中的答案确实涵盖了“不要那样做”类别),原因如前所述。这是关于为什么运行之间的顺序不同的特定情况,并且与特定的实现细节相关联。这种行为是“相对较新的”。
-
@user2864740,它实际上已经很老了。自 5.8.1 中添加 env var
PERL_HASH_SEED以来,它至少已有 12 年的历史。唯一的区别是它现在发生得更频繁了。过去在哈希被加盐之前必须发生一些特定条件,但现在所有哈希从一开始就被加盐。