2009-11-23 210 views
4

我有一個哈希值,像這樣:如何從散列哈希中獲得哈希切片?

my %h = (a => { one => 1, 
       two => 2 
      }, 
      b => { three => 3, 
       four => 4 
      }, 
      c => { five => 5, 
       six => 6 
      } 
    ); 

print join(',', @{$h{a}{qw/one two/}}); 

我得到的錯誤是: 不能使用一個未定義的值作爲q.pl線17 數組引用是與打印行。

我的預期是什麼 1,2

回答

17

在嵌套散列得到的散列切片,你必須逐步解除引用它。你得到你所需要的第一級:

$h{'a'} 

現在,你必須取消引用,作爲一個哈希值。但是,因爲它不是一個簡單的標量,所以你必須把它放在大括號中。爲了得到全散,你把%在括號前面:

%{ $h{'a'} } 

現在你想分得一杯羹,所以你用@更換%,因爲你得到多個元素,而你也把你的鑰匙在結束正常:

@{ $h{'a'} }{ @keys } 

它看起來更容易看到單獨的括號:

@{   }{  } 
    $h{'a'} @keys 
2

嘗試

print join(',',@{$h{'a'}}{qw/one two/}); 

使用數據::自卸車大大有助於情況下,像這樣一個