例えばこういう状況があったとする。

#! c:/perl/bin/perl

print "Content-type: text/plain\n\n";
print "hello\n";

$rein="教室";
$key="教";

if($rein =~ $key){
print"a\n";
}

これを実行するとaが表示される。
教室が教を含むから。

ところが教室をパソコン教室、教をパソコンにして同じcgiを実行すると、エラーになる。
これは「ソ」という文字のコードが5Cで終わるため。
5Cは\なので、このせいでバグる。

if($rein =~ $key)では「含まれるかどうか」という検索をしているが、
どうも=~を使うときは「パソコン」という文字でなく、文字コードの数字で判断されるらしい。
文字コードになると「ソ」は5Cを含むので検索できない。

しかしこれはこの文字コードがShift_JISだから。
これをuft-8やeucなどに変えると5Cでなくなるのでバグらないらしい。

なのでif($rein =~ $key)をやるときだけレインとキーをutf-8とかにできないかな。
つまりif(encode-utf($rein) =~ encode-utf($key))的なことができればいい。
この式は間違ってると思うが、イメージ的にはそんな感じ。
=~を使うときだけでも一時的に文字コードを変えられないかなぁ……。