2010-02-23 77 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