• ベストアンサー

ハッシュをkeysでうまく抽出できない

ハッシュのキーのリストを取ってきたいのですが、期待通りの動きをしてくれません。 いろいろ試したところ、以下のようなコードを作成した時、エラーになるようです。この場合、son, daughter, papi, mamaだけを出力したいのに、uncleが混じってきます。 正しいキーを抽出するには、どうしたら良いのでしょうか? perlのバージョンは、5.8.8です。 my %family = ( son => {age => 27, sex => man, height => 175}, daughter => {age => 20, sex => woman, height => 160}, papi => {age => 60, sex => man, height => 170}, mama => {age => 57, sex => woman, height => 161}, ); if(exists $family{'uncle'}->{age}){ } foreach my $key(keys %family){ printf "%s\n", $key; }

質問者が選んだベストアンサー

  • ベストアンサー
  • atom_seed
  • ベストアンサー率48% (25/52)
回答No.2

if文内で上位のキーを不意に作成してしまうのが原因ですね。 上位のキーがあるときに下位のキーを調べるという書き方にすれば解決できますよ。 if ( exists $family{'uncle'} && exists $family{'uncle'}->{age} ) { }

rafysta
質問者

お礼

なるほど、と思いました。 簡潔で、明快な解答をありがとうございます。 思い通りの結果が得られました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

>if(exists $family{'uncle'}->{age}){ このチェックを if(exists $family{'uncle'}){ としたらどうなりますか?

rafysta
質問者

お礼

回答ありがとうございます。 全然、思いつかなかったのですが、if(exists $family{'uncle'}){ だと、問題なくキーを抽出できました。

すると、全ての回答が全文表示されます。

関連するQ&A