如何在Perl中创建一个新的空哈希引用?

时间:2010-02-23 07:47:42

标签: perl hash reference

说我有类似的东西:

# %superhash is some predefined hash with more than 0 keys;
%hash = ();
foreach my $key (keys %superhash){
    $superhash{ $key } = %hash;
    %hash = ();
}

superhash的所有键是否都指向%hash访问的相同空哈希,或者它们是不同的空哈希?

如果没有,我怎样才能确保它们指向空哈希?

1 个答案:

答案 0 :(得分:18)

您需要使用\运算符来引用多个数据类型(数组或散列),然后才能将其存储到任一个的单个插槽中。但是在给出的示例代码中,如果引用,则每个代码都是相同的哈希值。

初始化数据结构的方法是:

foreach my $key (keys %superhash) {
    $superhash{ $key } = {}; # New empty hash reference
}

但由于自动更新(在将变量用作容器时创建适当的容器对象),Perl在{{}}}中基本上不需要这样的初始化。

my %hash;

$hash{a}{b} = 1;

现在%hash有一个键'a',其值为匿名hashref,包含键/值对b => 1。数组以相同的方式自动生成。