- ベストアンサー
文字列比較
文字列比較演算子で~の文字列の中に~が含まれていれば真を返すという下記のようなサンプルを作ったのですが、「ソ」「タ」「ゼ」「ー」の4文字だけ比較することができませんでした。エラーは 「ソ」 Unrecognized character \x94 at untitled2.pl line 5. 「タ」 エラーなし。ただし比較せず。 「ゼ」 Unmatched [ in regex; marked by <-- HERE in m/ゼ <-- HERE / at untitled2.pl line 4. 「ー」 Unmatched [ in regex; marked by <-- HERE in m/ー <-- HERE / at untitled2.pl line 4. と表示されましたのですが、これは上記の4文字に関しては部分比較することができないのでしょうか? それとも別の方法があるのでしょうか?どなたかご指導のよろしくお願いします。 環境はWindowsXP、ActivePerl、Httpdです。 ************************ $words1 = "アイウカキクスセソタチツゼー" ; $compare = "タ" ; if( $words1 =~ /$compare/ ){ print "比較対象文字が含まれています。\n" ; } else{ print "比較対象文字は存在しません。\n" ; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>UNIXで動かさないとダメということなのでしょうか? 最新のperlであれば、windowsでも表示可能です。 perlを最新のバージョンにして use encoding "shift_jis"; をつけて、上記のスクリプトを実行してください。 正しく動作します。(perl5.83で確認済)
その他の回答 (2)
- estea
- ベストアンサー率44% (39/87)
perl の最新をいれずに、文字化けもしたくないんなら、 文字列の比較のときだけ EUC にするとかいろいろやりようはありそうな雰囲気
お礼
一度”jcode”を使ってeucに直してから 比較してみたのですがうまくいきませんでした。 でももしかしたら私のソースがまずかったのかもしれませんね。もう一度比較の時にeucに変換してキチンと 動作するか検証してみたいと思います。 ありがとうございました。
- chie65536
- ベストアンサー率41% (2512/6032)
全角文字の第2バイトが悪さをしています。 ソ = 94 5C = 第2バイトが「\」など。 第2バイトに特殊キャラクタ「\」などが含まれ、予期せぬ結果になっているのです。 ソースをEUCで記述するなど、第2バイトが悪さをしない工夫が必要です。
お礼
今まで特に全角文字の第2バイトを意識したことが なかったので今回良い勉強になりました。 ありがとうございます。
補足
早々と回答ありがとうございます。 ソースをEUCで記述した場合、Windows上で実行すると文字化けしてしまうのですが、これはUNIXで動かさないとダメということなのでしょうか?
お礼
ご返事遅くなって申し訳ありません。 私が今まで使っていたバージョンが perl5.8.2 build808でしたので 5.8.3 build809にして use encoding "shift_jis";で指定したところ うまく動作しました。ありがとうございます!