こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

use encodingによって正規表現の結果が変わる?

お世話になります。
webシステムで、画面入力値のチェックをperlで行っているのですが、
今回、perlのバージョンアップ対応を行っており、ソース修正をしたところ、以下のような現象に悩まされて困っております。
(本当のソースはもっと長いのですが、以下の現象により入力チェックが正常に動作しないという点までは突き止めました。)

バージョン
perl v5.8.0
os Red Hat Linux release 9

現象
use encodingが指定されていると、正規表現の$が効かないようです。

ソースと実行結果1
#!/usr/bin/perl
#use encoding "euc-jp";
if ('apple' =~ /e$/) {
print ("match\n");
} else {
print ("unmatch\n");
}
このときは match と表示されます。

ソースと実行結果2
#!/usr/bin/perl
use encoding "euc-jp";
if ('apple' =~ /e$/) {
print ("match\n");
} else {
print ("unmatch\n");
}
このときは、unmatch と表示されます。

対処方法のヒントだけでも頂けると助かります。
(他の質問を検索してみましたが、同様なものを見つけることができませんでした。)
もしかして、perlのバグなのでしょうか?

投稿日時 - 2008-04-21 23:54:00

QNo.3966293

困ってます

質問者が選んだベストアンサー

対処方法の回答ではありませんが、
Perl v5.8.8 だと、どちらの結果も match になります。
やはり Perl v5.8.0 のバグかもしれませんね。

投稿日時 - 2008-04-22 05:24:25

お礼

返事が遅れてすみません。
やはり、5.8.0のバグなのでしょうか?
perl5.6.0でも再現しませんでした。

ちなみに、追加検証した結果、「固定値と$の組み合わせ」が駄目だということがわかりました。
ですので、上記でeを[]で囲めばマッチしました。(笑)

#!/usr/bin/perl
use encoding "euc-jp";
if ('apple' =~ /[e]$/) {
print ("match\n");
} else {
print ("unmatch\n");
}

では、また、わからないことがありましたらよろしくお願いします。

投稿日時 - 2008-04-27 23:42:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問