質問: 正規表現で 以下のようなプログラムを作りました。$arrの中に、(や、[、\マーク等が入っていると、 /[/: unmatched [] in regexp at.. というメッセージが出てプログラムが止まってしまいます。マークの前に\を入れるとエラーにはならないのですが、\を付けずに済む方法はないのでしょうか。今は手作業で\を付けたり消したりしているのですが、単語の数が増えたらどうやって処理したらいいか...。というわけで、解る方、よろしくお願いします。 -------------------------------------------------------------------------- foreach $ch1 (@ch1) { foreach $arr (@arr) { if (/$arr/){ 処理1 }else{ 処理2 } } }
回答: if (/$arr/){ の行の直前で $arr の中身を修正してやればいいだけだと思います。 修正すべきなのは英数字以外のキャラクタで、それらの前に \を追加すればいいのだから、 $arr =~ s/(\w)/\\$1/g; ってやつを追加してやればいいわけです。