Проблемы с доступом к значениям во вложенных хэшах

#perl

#perl

Вопрос:

Я пытаюсь получить доступ к некоторым спискам, которые находятся в двух глубинах хэша. Вот мой код:

 my %english = (
    greetings => [("Hello", "What's up?")],
);

my %spanish = (
    greetings => [("Hola", "Que pasa?")],
);

my %bighash = (
    english => %english,
    spanish => %spanish,
);

print 'English greetings: ';
if (my $array = $bighash{'english'}{'greetings'}) {
    print "n$_" for @$array
}
else {
    print 'Fail.';
}
 

Однако if условие всегда оценивается как «ложное». Почему это так?

Ответ №1:

Выражения

 english => %english,
spanish => %spanish,
 

неверно, поскольку значение хэша должно быть скаляром (например, ссылкой на хэш), а не хэшем. Попробуй

 english => %english,
spanish => %spanish,
 

или

 english => { %english },
spanish => { %spanish },
 

вместо этого.

Комментарии:

1. В качестве примечания — первое решение ( % ) — хранит ссылки на СУЩЕСТВУЮЩИЕ хэши. Второй ( {%} ) — хранит ссылки на новые клонированные хэши (клонирование только первого уровня, а не глубокое вложенное клонирование всех структур)

2. Спасибо. Это мой первый день работы с Perl — человек, это странный язык.

3. @AdamS Все языки (программирования) странные. Некоторые из них просто более странные, чем другие.