给定一组键和一组值,我可以使用@hash{@keys} = @vals
创建一个包含这些键和值的哈希值。
但是,我想对哈希的子键执行此操作。这不起作用:$h{"key"}{@subkeys} = @vals
。
$ perl -MData::Dumper -le '
@subkeys=(qw(one two));
@vals=(1, 2);
$hash{"key"}{@subkeys} = @vals;
for (qw(subkeys vals)) {
print "$_ :\n", Dumper(\@{$_})
};
print "hash: \n", Dumper(\%hash);'
我得到的是:
subkeys :
$VAR1 = [
'one',
'two'
];
vals :
$VAR1 = [
1,
2
];
hash:
$VAR1 = {
'key' => {
'2' => 2
}
};
如果可能,获取以下Dumper结果的正确语法是什么:
$VAR1 = {
'key' => {
'one' => 1,
'two' => 2
}
};
使用临时哈希时它确实有效:
perl -MData::Dumper -le '@subkeys=(qw(one two)); @vals=(1, 2); @tmp{@subkeys}=@vals; $hash{"key"}={%tmp}; print Dumper(\%hash)'
但是我怀疑我在没有%tmp
哈希的情况下错过了正确的语法。
答案 0 :(得分:4)
您需要关闭@{}
切片“cast”中的hashref部分。
@{$hash{"key"}}{@subkeys} = @vals;