- ベストアンサー
連想配列とforeach
連想配列 %hogeにおいて、.name の名前が最後に付く配列の値を取り出したいと思い、下記のようにしました。 foreach ($hoge{/.*\.name$/}) { print "$_\n"; } としてみましたが期待した出力がされませんでした。こういう描き方って出来ないんでしょうか?それともどこか間違ってますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$_ = "right.name"; print /.*\.name$/; や、 $_ = "chigau.namae"; print /.*\.name$/; の結果を見てみると分かりますが、この正規表現は、そのままで用いると変数 $_ に代入された値のマッチ結果になります。 foreach (keys %hoge) { # ハッシュのキーを一つずつ $_ に代入 if (/.*\.name$/) { print "$hoge{$_}\n"; } } のように、一旦$_ に代入する形式にすれば、お望みのことは可能だと思います。
その他の回答 (1)
- leaz024
- ベストアンサー率75% (398/526)
ハッシュ(連想配列)のキーに正規表現を書くことはできません。 やるなら、次のようにします。 foreach (keys %hoge) { print $hoge{$_} if /\.name$/; } あるいは、 foreach (grep /\.name$/, keys %hoge) { print "$hoge{$_}\n"; } もしくは、 foreach (map $hoge{$_}, grep /\.name$/, keys %hoge) { print "$_\n"; }
お礼
>ハッシュ(連想配列)のキーに正規表現を書くことはできません。 そうですか。出来ると嬉しいこともあるので是非対応して欲しいところです。その分オーバーヘッドが大きくなってしまっては元も子もないですが。 色々書き方があるものですね。勉強になります。 #といっても後半の2つはほとんど意味不明です^^;)。勉強しておきます。 ありがとうございました。
お礼
回る数を減らそうと画策しましたが、配列の数分だけ回らないとだめと言うことですね。 ありがとうございました。