- ベストアンサー
ハッシュを無名変数へ代入して任意の値を取り出したい
%allarray内の'あああ'を表示させたいのですが、 foreach構文で回して if($name eq "$allarray{$key}"){ $TopName=$allarray{$key}; } とその都度してから$TopNameで表示させるのがだるいので下記のように無名変数へハッシュを代入して取り出せないかと試行錯誤しているのですが、解決に至るアドバイスなど頂けませんでしょうか $name='aaa'; %allarray = ( 'aaa' => 'あああ', 'kakaka' => 'かかか', 'sasasa' => 'さささ', ); $mumei=\%allarray; $TopName=$mumei{$$allarray}{$name}; print "$TopName"; で >あああ と表示させたいのです お忙しいかとは存じますがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
他の皆さんと同じでなぜforeachでループさせたくないのかがまったく 分かりませんが(というより何をしたいのか自体分かりませんが)。 上記なら $name='aaa'; %allarray = ( 'aaa' => 'あああ', 'kakaka' => 'かかか', 'sasasa' => 'さささ', ); $TopName = $allarray{$name}; print $TopName; exit; と変わりませんよね? (ループさせる意味自体がない) 特定の値を代入しているハッシュキーを取得したいなら my $name='あああ'; my %allarray = ( 'aaa' => 'あああ', 'kakaka' => 'かかか', 'sasasa' => 'さささ', ); my $TopName; while(my ($key, $value) = each(%allarray)) { if($name eq $value) { $TopName = $key; last; } } print $TopName; exit; こうなんですけどね。
お礼
whillなりforeachでループさせなくても、$allarray{$name}とする事で特定のkeyに対する値を取得できるんですね。 恥ずかしながら、いちいちループさせないと取得できないのかと思っていました。 皆様、お忙しい中、ありがとうございます。