2010-02-23 37 views
9

说我有这样的事情:如何在Perl中创建一个新的空哈希引用?

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

都会superhash点的键由%hash访问相同的空哈希或他们将不同的空哈希?

如果不是,我怎样才能确保它们指向空的哈希?

+0

@toolic我的歉意。我的实际代码太复杂了,所以我重写了这个问题。 – 2010-02-24 15:28:13

回答

16

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

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

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

但是,像这样的初始化是在很大程度上Perl不必要由于自动激活(当一个变量被用作一个容器创建适当的容器对象)。

my %hash; 

$hash{a}{b} = 1; 

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

+0

同意。当Perl不需要它时,不需要在 附加一个额外的散列。 – Zaid 2010-02-23 08:50:38

+0

我将如何访问$ hash {a}的密钥?当我尝试'foreach $ rk(键$ hash {a}){...'它给了我一个错误:类型必须是散列 – 2010-02-23 09:12:27

+0

啊我明白了:'$ deref = $ hash {a}'然后'foreach $ key(keys%$ deref){...' – 2010-02-23 09:25:42