encoding

perl ソースの文字コードセットを指定する。

use encoding "cp932";
use encoding "euc-jp";
use encoding "utf8";
など

"shift-jis" も使えるが、"cp932" の場合はMicrosoft拡張も正しく処理してくれる(らしい)。
エンコード名を省略した場合は、環境変数PERL_ENCODING の値が使われる。

use encoding を記述しない場合は、古典的な文字列(バイト列)と見なされる。従って、2バイト目が7Ch (\) であるようなシフトJIS漢字などを文字列に含めると文字化けする。

use encoding は、コンパイル時に解釈されるので、複数のエンコード名を使う事は出来ない。複数記述した場合は、最後の記述のみが有効になる。use したモジュールに対しても有効になるので、モジュール間の文字コードセットが異なっていると、正しい解釈が行われなくなる。

標準入出力の文字コードセットがソースの文字コードセットと違う場合:
例1)EUCを使用したLinuxでの標準的な設定
use encoding "utf8", STDIN =>":encoding(euc-jp)", STDOUT => ":encoding(euc-jp)";
例2)Windoesでの標準的な設定
use encoding "utf8", STDIN =>":encoding(cp932)", STDOUT => ":encoding(cp932)";

ソース文字セットがutf8なら、use utf8を使う方が望ましい。
例1)EUCを使用したLinuxでの標準的な設定
use utf8;
binmode STDIN ,":encoding(euc-jp)";
binmode STDOUT , ":encoding(euc-jp)";
例2)Windoesでの標準的な設定
use utf8;
binmode STDIN ,":encoding(cp932)";
binmode STDOUT , ":encoding(cp932)";

ファイルの文字コードセットがソースの文字コードセットと違う場合は、use open を使うこと。