/ / Призначити масиви хеш-підрозділів - масиви, perl, hash

Призначати масиви до хешових підрозділів - масиви, 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 хеш

Відповіді:

4 для відповіді № 1

Вам потрібно закрити частину хеш-версії в a @{} скибочка "литий".

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