ネストされたハッシュの値にアクセスする際の問題

私はハッシュの2つの深いリストにアクセスしようとしています。ここに私のコードです:

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,
メモとして、最初の解決策( \%)は、既存のハッシュへの参照を保存します。 2番目の( {%} ) - 新しいクローンハッシュへの参照を格納します(すべての構造を深くネストしたクローンではなく、
追加された 著者 DVK,
@AdamSすべての(プログラミング)言語が奇妙です。いくつかは他のものよりも奇妙です。
追加された 著者 Brad Gilbert,