2009-11-23 155 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/}); 

使用数据::自卸车大大有助于情况下,像这样一个