Perl: доступ к значениям хеша внутри хеша
Я только что взял Perl. У меня есть небольшая путаница с доступом к хэш-значениям. Ниже приведен код, где я пытаюсь получить доступ к значениям хеша внутри хеша. Поскольку я использую простой текстовый редактор для кодирования, я не могу понять, в чем может быть проблема. Пожалуйста помоги
my %box = (
Milk => {
A => 5,
B => 10,
C => 20,
},
Chocolate => {
AB => 10,
BC => 25,
CD => 40,
},
);
foreach my $box_key(keys %box) {
foreach my $inside_key (keys %box{box_key})
print "$box_key"."_$inside_key""is for rupees $box{box_key}{inside_key}";
}
2 ответа
ikegami объяснил это очень хорошо, и я чувствую, что вы все еще что-то упускаете в своем коде, поэтому у вас возникла проблема, попробуйте следующий код, надеюсь, он вам поможет.
my %box = (
Milk => {
A => 5,
B => 10,
C => 20,
},
Chocolate => {
AB => 10,
BC => 25,
CD => 40,
},
);
foreach my $box_key(keys %box) {
foreach my $inside_key (keys $box{$box_key}) {
print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";
}
}
Выход:
Chocolate_CD is for rupees 40
Chocolate_BC is for rupees 25
Chocolate_AB is for rupees 10
Milk_A is for rupees 5
Milk_C is for rupees 20
Milk_B is for rupees 10
Если синтаксис
keys %hash
для хэша это
keys %{ ... }
для ссылки на хэш. В этом случае ссылка хранится в $box{$box_key}
так что вы бы использовали
keys %{ $box{$box_key} }
Кроме того, вы получаете доступ к элементам с именем box_key
а также inside_key
в нескольких местах, где вы на самом деле хотите элементы, названные $box_key
а также $inside_key
,
Наконец, вы можете использовать завитки вокруг имен переменных, чтобы указать Perl, где заканчивается имя переменной.
for my $box_key (keys %box) {
for my $inside_key (keys %{ $box{$box_key} }) {
print "${box_key}_$inside_key is for rupees $box{$box_key}{$inside_key}\n";
}
}