それ、メッセージ花火でわざわざ伝えること?

パターンマッチの勉強をしていたところ
偶然「ちょう」という言葉を以下のように書くとひっかからないことに気づきました。
なぜ「ちょう」という日本語だとひっかからないのでしょうか?
また「ちょう」がパターンマッチにひっかかるようにするのにはどうすべきなのでしょうか?

if($word =~ /ちょう/){
{ &error("エラー","「ちょう」という言葉は使用できません"); }

A 回答 (1件)

文字コードの違いと、UTF-8フラグの有無が考えられます。



$wordに入っている文字列の文字コードと、Perlスクリプトが書かれている文字コードを一致させる必要があります。

また、双方がUTF-8で一致していたとしても
use utf8;等で、Perlスクリプト内ではUTF8フラグ付きになっていて、$wordにはフラグ無し、
あるいは、 $wordが何かのモジュールで処理されたUTF8 フラグ付きになっていて、Perlスクリプトにはフラグ無し
という状態でも一致しません。

最近なら、次のようにやるのがよいでしょう。
・スクリプトは use utf8; を使い、UTF-8で記述する。
・プログラム中では、UTF-8フラグ付き文字列で処理する。
 ファイル等からの入力はPerlIOを利用したり、Encode::decodeしたりしてUTF8フラグ付きにする。
 ファイル等への出力は、PerlIOを利用したり、Encode::eecodeしたりしてUTF8フラグをはずす。
    • good
    • 0
この回答へのお礼

大変分かりやすく、そしてご丁寧な回答ありがとうございます。
処理に使用していた文字コードが別々だったようです。
そこで統一したところ、うまくいきました!!
大変助かりました。ありがとうございました。

お礼日時:2013/06/01 09:46

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