2013-06-20 63 views
2

我有散列使用哈希。使用散列訪問哈希

我想只迭代'0'的值。

$VAR1 = { 
    '1' => { 
    '192.168.1.1' => '192.168.1.38' 
    }, 
    '0' => { 
    '192.168.32.6' => '192.168.32.43' 
    } 
}; 

我可以訪問它的唯一方法是通過創建兩個foreach my $key (keys(%myhash))循環:

我可以使用:

foreach my $key (keys(%myhash{0})) ## does not work 

,或者直接以某種方式訪問​​這些值?

感謝

+2

你讀過['perlreftut']嗎?(http:// perldoc .perl.org/perlreftut.html)和['perldsc'](http://perldoc.perl.org/perldsc.html)? – amon

+0

你能插入你使用的嵌套(?)'''foreach''循環的代碼嗎?這將有助於說明和對比這裏討論的兩種不同的訪問方法:即5.14和'up可以直接引用,而早期版本需要取消引用步驟(因此也是雙循環)。 –

回答

3

首先,如果你使用的是連續的整數作爲鍵的哈希那麼很可能,你應該使用數組來代替。

對應於key 0散列的值是$dhcpoffers{0},因爲它是一個標量%dhcpoffers{0}只是一個語法錯誤。

你需要

for my $key (keys %{ $dhcpoffers{0} }) { ... } 

,或者,如果你喜歡

my $offer_0 = $dhcpoffers{0}; 
for my $key (keys %$offer_0) { ... } 

因爲Perl 5的14版,keys將接受一個哈希參考,所以你可以寫多少清潔劑

for my $key (keys $dhcpoffers{0}) { ... } 
+0

非常感謝。我以爲我有(1),但可能不正確:) – Stef

+0

酷!雖然我有5.16.3,並且不能用'''鍵'來做你說的話。你能稍微展開/改進你的答案來說明嗎? –

+0

@ G.Cito:對不起,我最後一行代碼中存在拼寫錯誤。現在就試試。 – Borodin