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";
   }
}
Другие вопросы по тегам