プロが教える店舗&オフィスのセキュリティ対策術

連想配列 %hogeにおいて、.name の名前が最後に付く配列の値を取り出したいと思い、下記のようにしました。
foreach ($hoge{/.*\.name$/}) {
 print "$_\n";
}
としてみましたが期待した出力がされませんでした。こういう描き方って出来ないんでしょうか?それともどこか間違ってますか?

A 回答 (2件)

ハッシュ(連想配列)のキーに正規表現を書くことはできません。


やるなら、次のようにします。
  foreach (keys %hoge) {
    print $hoge{$_} if /\.name$/;
  }
あるいは、
  foreach (grep /\.name$/, keys %hoge) {
    print "$hoge{$_}\n";
  }
もしくは、
  foreach (map $hoge{$_}, grep /\.name$/, keys %hoge) {
    print "$_\n";
  }
    • good
    • 0
この回答へのお礼

>ハッシュ(連想配列)のキーに正規表現を書くことはできません。
そうですか。出来ると嬉しいこともあるので是非対応して欲しいところです。その分オーバーヘッドが大きくなってしまっては元も子もないですが。
色々書き方があるものですね。勉強になります。
#といっても後半の2つはほとんど意味不明です^^;)。勉強しておきます。
ありがとうございました。

お礼日時:2002/01/16 15:34

$_ = "right.name";


print /.*\.name$/;
や、
$_ = "chigau.namae";
print /.*\.name$/;

の結果を見てみると分かりますが、この正規表現は、そのままで用いると変数 $_ に代入された値のマッチ結果になります。

foreach (keys %hoge) { # ハッシュのキーを一つずつ $_ に代入
 if (/.*\.name$/) {
  print "$hoge{$_}\n";
 }
}

のように、一旦$_ に代入する形式にすれば、お望みのことは可能だと思います。
    • good
    • 0
この回答へのお礼

回る数を減らそうと画策しましたが、配列の数分だけ回らないとだめと言うことですね。
ありがとうございました。

お礼日時:2002/01/16 15:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!