Perl什么时候“哈希”哈希?

时间:2015-05-12 14:25:12

标签: perl hash

根据perl doc页面:

perldata

哈希是由关联字符串键索引的标量值的无序集合。

我原以为perl哈希是有序的,因为它们通常是使用数组构建的:

my %h = ("a",1,"b", 2);

如果Perl哈希值是无序的,则需要对它们进行“哈希”处理以允许访问。问题是Perl何时哈希哈希?

如果我们这样做:

my %h = ("1",1); #1
print $h{"1"};     #2

我假设第1行正在内部进行散列。

如果从数组构造哈希:

#@a = ("1", 1);
my %h = @a;

我假设%h的任务正在进行散列。

请确认我的假设是否正确,我似乎无法在互联网上的任何地方找到详细信息。

1 个答案:

答案 0 :(得分:7)

每当字符串用作散列键时,就会计算该字符串的散列值。如果密钥是常量(例如"a"中的$hash{"a"}),则其哈希值在编译时计算并存储在optree中;否则根据需要在运行时计算。这适用于分配和检索;散列键用于查找正确的散列元素,以将值存储到或从中检索值。