• ベストアンサー

Perlにおけるパターンマッチ

パターンマッチの勉強をしていたところ 偶然「ちょう」という言葉を以下のように書くとひっかからないことに気づきました。 なぜ「ちょう」という日本語だとひっかからないのでしょうか? また「ちょう」がパターンマッチにひっかかるようにするのにはどうすべきなのでしょうか? if($word =~ /ちょう/){ { &error("エラー","「ちょう」という言葉は使用できません"); }

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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フラグをはずす。

masa-25
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A