※ ChatGPTを利用し、要約された質問です(原文:use encodingによって正規表現の結果が変わる?)
use encodingによって正規表現の結果が変わる?
このQ&Aのポイント
webシステムで画面入力値のチェックをperlで行っており、perlのバージョンアップ対応を行った結果、正規表現の$が効かなくなる現象が発生しています。
バージョンはperl v5.8.0、osはRed Hat Linux release 9です。
use encodingが指定されていると、正規表現の$が効かなくなります。対処方法がわからないため、他の質問を検索しましたが解決策は見つかりませんでした。perlのバグの可能性があるので、対処方法を教えていただきたいです。
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のバグなのでしょうか?
お礼
返事が遅れてすみません。 やはり、5.8.0のバグなのでしょうか? perl5.6.0でも再現しませんでした。 ちなみに、追加検証した結果、「固定値と$の組み合わせ」が駄目だということがわかりました。 ですので、上記でeを[]で囲めばマッチしました。(笑) #!/usr/bin/perl use encoding "euc-jp"; if ('apple' =~ /[e]$/) { print ("match\n"); } else { print ("unmatch\n"); } では、また、わからないことがありましたらよろしくお願いします。