[英]How do I get a hash slice from a hash of hashes?
我有这样的哈希:
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行的ARRAY引用,这是打印行。
我的预期是1,2
要从嵌套哈希中获取哈希切片,您必须逐步取消引用它。 你得到了你需要的第一级:
$h{'a'}
现在,你必须取消引用它作为哈希。 但是,由于它不是一个简单的标量,你必须把它放在括号中。 要获得整个哈希值,您需要在大括号前加一个%
:
%{ $h{'a'} }
现在你想要一个切片,所以你用@
替换%
,因为你得到了多个元素,并且你也正常地将你的键放在最后:
@{ $h{'a'} }{ @keys }
分别看到大括号可能更容易:
@{ }{ }
$h{'a'} @keys
为了简化这一点,v5.20引入了后缀解除引用 。 您可以从左到右工作,而不是将东西包在支架中并从内到外工作:
$h{a}->@{qw/one two/};
那个@
就像你在第一个支架前看到的一样。 你仍然知道它是一个哈希切片,因为支撑跟随着这个印记。
尝试
print join(',',@{$h{'a'}}{qw/one two/});
Data :: Dumper的使用极大地有助于像这样的情况
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.