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

変数と変数を正規表現にて比較する場合に、

if ($text =~ /$pattern/) { ... }
とすると、「$pattern」を変数として認識しません。
「$」が位置指定子として認識されている?ようです。

「$pattern」を変数として認識させるにはどのようにすればよいのでしょうか?
「\$pattern」のように「\(バックスラッシュ)」を入れても認識されませんでした。

A 回答 (2件)

>「$pattern」を変数として認識させるにはどのようにすればよいのでしょうか?



if ($text =~ /$pattern/) { ... }
で大丈夫ですよ。

ただし、$pattern に「\」などの記号を入れる場合は、注意が必要です。例えば、
if ($text =~ /\s+/) { ... }
としたい場合は、
$pattern = "\\s+"; # \が2つ必要
if ($text =~ /$pattern/) { ... }
としなければなりません。

上の問題ではないときは、うまくいかない$textと$patternの情報を提示いただければ、何かわかるかもしれません。

この回答への補足

回答ありがとうございます。
上下いれかわってますが・・・

$patternがファイルから読み込んだ文字列であり、
改行コードが含まれていたため比較してもひっかからなかったようです。

さらにTacosanの //を使わない業を使用したら$patternが文字列として認識されました。

補足日時:2006/12/12 09:46
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

すみません。もう自宅に帰ってきてしまったので、
詳細の情報はすぐには書けませんが、
あるテキストファイルから1行ずつ読み込み、
$patternに格納した後、それが$text内に含まれるかをチェックしようとしています。
($patternに格納するものには「\」などのエスケープが必要な文字はありません)

EOFまで読み込むため、ループにて制御し、
変数による比較を行わなければならないのですが、
変数を使う>$を頭につける>認識しない!という感じだと思っているのですが、他に理由などあるのでしょうか。

少ない情報で申し訳ありません。

お礼日時:2006/12/12 01:42

裏技っぽいんですが,


if ($text =~ $pattern) { ... }
でよかったりして. あとで見たときに困りそうですが.

この回答への補足

お礼と補足が逆になってしまいましたが、
if ($text =~ $pattern) { ... }でいけました!

本当にありがとうございます!

補足としては$patternがファイルから読み込んだ文字列であり、
改行コードが含まれていたため比較してもひっかからなかったというのもありました。
($patternに文字列を入れた後、改行コードを削除したら大丈夫でした。)

補足日時:2006/12/12 09:45
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
もう疲れ果てて家に帰ってきてしまいました(笑)

明日出勤したら早速ためしてみます!

お礼日時:2006/12/12 01:37

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