说我有一个哈希值,我可以索引:
$hash{$document}{$word}
从我读在线(虽然我无法找到这对perlreftut , perldsc或perllol ),我可以用一个列表,如果我用切片的哈希@
前缀我的哈希以表明我想哈希返回一个列表。 但是,如果我尝试使用列表切开我的哈希@list
:
@%hash{$document}{@list}
我得到几个"Scalar values ... better written"
错误。
我怎样才能削减Perl中的嵌套哈希?
您哈希的SIGILL必须是@
,就像这样:
@{$hash{$document}}{@list}
假设@list
包含有效的密钥%hash
将返回相应的值,或undef
,如果该键不存在。
这是基于散列切片的一般规律:
%foo = ( a => 1, b => 2, c => 3 );
print @foo{'a','b'}; # prints 12
%bar = ( foo => \%foo ); # foo is now a reference in %bar
print @{ $bar{foo} }{'a','b'}; # prints 12, same data as before
首先,当你希望得到一个哈希片列表,请使用@
第一印记。 %
是没有意义在这里。
其次,你应该明白, $hash{$document}
值不是一个哈希或数组。 这是一个参考 - 一个哈希或数组。
有了这一切说,你可能会使用这样的:
@{ $hash{$document} }{ @list };
...所以你提领的价值$hash{$document}
,然后使用散列切片过去。 例如:
my %hash = (
'one' => {
'first' => 1,
'second' => 2,
},
'two' => {
'third' => 3,
'fourth' => 4,
}
);
my $key = 'one';
my @list = ('first', 'second');
print $_, "\n" for @{ $hash{$key} }{@list};
# ...gives 1\n2\n