perlメモ

== 日本語を正確に処理する方法 ==
: 日本語(マルチバイト文字)をPerlで正確に処理するためには'''Encodeモジュール'''を使用すると良い
: ※ マルチバイト文字:2バイト以上のデータで表現される文字の事であり、ひらがなや漢字などの全角文字が該当する

=== プログラムのソース以外(外部)から入力された文字列に対する処理 ===
* 外部から入力される文字列には以下のような場合が該当する
 コマンドライン引数から得られた文字列
 ファイルから読み込まれた文字列
 標準入力によって得られた文字列
* このような文字列にはEncodeモジュールのdecode関数を使用し、Perlの内部表現へ変換すると良い
: → 正規表現などで文字列を正確に扱うことが可能になる
* decode関数によって変換された文字列を外部に出力する際は、Encodeモジュールのencode関数で再変換する必要がある

=== プログラム例 ===
 use Encode qw/encode decode/;    # Encodeモジュールの使用宣言
                 # Encodeモジュールのencode関数:外部へ出力する文字列はエンコード
                 # Encodeモジュールのdecode関数:プログラム内で扱う文字列はデコード

 my $char = shift;    # 外部からの入力(コマンドライン引数)を格納
 $char = decode('UTF-8', $char);    # 文字コードがUTF-8である文字列を内部表現に変換($charがUTF-8でなければならない)
 $char = encode('UTF-8', $char);    # Perlの内部表現をUTF-8の文字列に変換

=== decode関数を使用する際の注意 ===
* UTF-8フラグが付いている文字列に対してはデコード処理を行うことができない(エラーが出る)
* UTF-8フラグの有無は'''utf8::is_utf8関数'''によって判断できる
* UTF-8フラグが立っている文字列の内部表現はUTF-8となる(decode関数を使用して変更する必要がない)

=== その他 ===
* プログラムのソースコードと同じ文字コードのプラグマを有効にすると良い(ソースコードがUTF-8の場合はUTF-8プラグマを有効にする)
 ## utf8モジュールの使用宣言
 use utf8;    # utf8プラグマを有効にする(ソースコードに書かれたUTF-8バイト文字列を内部文字列に変換)

=== 参考サイト ===
* [http://d.hatena.ne.jp/perlcodesample/20091118/1246679588 Encode - 日本語などのマルチバイト文字列を適切に処理する / Perlモジュール徹底解説]
* [http://www.rwds.net/kuroita/program/Perl_unicode.html Perl 5.8.x Unicode関連]
* [http://d.hatena.ne.jp/dayflower/20080219/1203493616 UTF8 フラグあれこれ]
[[Category:三ノ宮|ぱーるめも]]

Comments