将数组分配给哈希子项

时间:2016-02-05 13:30:34

标签: arrays perl hash

给定一组键和一组值,我可以使用@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哈希的情况下错过了正确的语法。

1 个答案:

答案 0 :(得分:4)

您需要关闭@{}切片“cast”中的hashref部分。

@{$hash{"key"}}{@subkeys} = @vals;