Biorąc pod uwagę tablicę kluczy i tablicę wartości, mogę utworzyć skrót za pomocą tych kluczy i wartości @hash{@keys} = @vals
.
Jednak chciałbym to zrobić dla podkluczy hasha. To nie działa: $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);"
Otrzymuję:
subkeys :
$VAR1 = [
"one",
"two"
];
vals :
$VAR1 = [
1,
2
];
hash:
$VAR1 = {
"key" => {
"2" => 2
}
};
Jeśli jest to możliwe, jaka byłaby poprawna składnia, aby uzyskać następujący wynik Dumper:
$VAR1 = {
"key" => {
"one" => 1,
"two" => 2
}
};
Działa podczas używania skrótu tymczasowego:
perl -MData::Dumper -le "@subkeys=(qw(one two)); @vals=(1, 2); @tmp{@subkeys}=@vals; $hash{"key"}={%tmp}; print Dumper(%hash)"
Ale podejrzewam, że po prostu brakuje prawidłowej składni, aby uzyskać ją bez %tmp
haszysz.
Odpowiedzi:
4 dla odpowiedzi № 1Musisz zamknąć część hashref w @{}
kromka "obsada".
@{$hash{"key"}}{@subkeys} = @vals;