#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 Все языки (программирования) странные. Некоторые из них просто более странные, чем другие.