说我有类似的东西:

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

superhash的所有键是指向%hash访问的同一个空哈希还是它们是不同的空哈希?

如果不是,我如何确保它们指向空散列?

最佳答案

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

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

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

但是由于自动生存(在将变量用作容器时创建适当的容器对象),因此在Perl中基本上不需要这样的初始化。
my %hash;

$hash{a}{b} = 1;

现在%hash有一个键“a”,其值是一个匿名hashref,其中包含键/值对b => 1。阵列以相同的方式自动存活。

关于perl - 如何在Perl中创建一个新的空哈希引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2316481/

10-09 05:11