[("Hola", "Que pasa?")], ); my %bighash = ( "> [("Hola", "Que pasa?")], ); my %bighash = ( "> [("Hola", "Que pasa?")], ); my %bighash = ( " />

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

Я намагаюся отримати доступ до деяких списків, які складаються з двох глибин у хеш. Ось мій код:

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 завжди визначається як "false". Чому це?

0

1 Відповіді

Вирази

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

не є правильними, оскільки значення хешу має бути скалярним (наприклад, довідкою хешу), а не хешем. Спробуйте

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

або

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

замість цього.

5
додано
Дякую. Це мій перший день Perl - людина, це дивна мова.
додано Автор Adam S, джерело
Як примітка - перше рішення ( ) - зберігає посилання на існуючі хеші. Другий ( {%} ) - зберігає посилання на нові клоновані хеші (клонування тільки першого рівня, а не глибоко вкладених всіх структур)
додано Автор DVK, джерело
@AdamS Всі (програмування) мови дивні. Деякі з них просто більш дивні, ніж інші.
додано Автор Brad Gilbert, джерело