2016-02-05 88 views
2

給定一個鍵和數組值的數組,我可以使用@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 
        } 
     }; 

如果這是可能的,什麼是正確的語法得到以下自卸車結果:

$VAR1 = { 
      'key' => { 
        'one' => 1, 
        'two' => 2 
        } 
     }; 

它使用時的工作臨時哈希:

perl -MData::Dumper -le '@subkeys=(qw(one two)); @vals=(1, 2); @tmp{@subkeys}[email protected]; $hash{"key"}={%tmp}; print Dumper(\%hash)' 

但我懷疑我只是錯過了正確的語法來獲得它沒有%tmp散列。

回答

4

您需要關閉@{}切片「cast」中的hashref部分。

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