Windows環境 ActivePerl で日本語を使用する
- perl は EUCコードに強く依存した言語であるため、SHIFT-JIS とは相性が悪い。
- use utf8 で書くのがいちばんいいが、それでもイロイロと問題がある。
- use encoding "cp932" でコードを書くと一見楽そうに思えるが、実は perl 内部コンパイル時に UTF-8 に変換されるだけなので、実質 use utf8 と同じ。
- 漢字のファイル名・ディレクトリ名をあつかうときは、そのつど SHIFT-JIS に変換する。これがイチバン。
キ・ホ・ン
#!perl -w
use utf8;
use Encode;
binmode STDOUT, ":encoding(cp932)";
$filename = "月間集計表.txt";
open IN, '<', encode("cp932", $filename);
もちろん、-f -d opendir mkdir rename unlink そのた、すべて encode("cp932",・・・) してやる。
#!perl -w
use utf8;
use Encode;
binmode STDOUT, ":encoding(cp932)";
$subdir = "平成18年度";
if (-d encode("cp932", $subdir)) {
opendir DIR,encode("cp932", $subdir);
@files = readdir DIR;
closedir DIR;
foreach $filename (@files) {
$filepath = $sundir.'/'.$filename;
if (-f encode("cp932", $filepath)) {
#・・・
}
}
} else {
mkdir encode("cp932", $subdir);
}
いちいち cp932 してられない?だったら関数を1つ作ってやるだけでずいぶん楽になる。
#!perl -w
use utf8;
use Encode;
binmode STDOUT, ":encoding(cp932)";
sub FS { encode("cp932", shift) } # ファイルシステム固有のエンコード
$subdir = "平成18年度";
if (! -d FS($subdir)) { print $subdir," がみつかりません。¥n"; }
オススメしない例
#!perl -w
use utf8;
use Encode;
binmode STDOUT, ":encoding(cp932)";
$subdir = encode("cp932","平成18年度"); #最初にcp932エンコードしておくと便利??
if (! -d $subdir) { print $subdir," がみつかりません。¥n"; } # 結局あとで困る。
良くあるミス
・binmode STDOUT, ":encoding(shiftjis)";
・open FILE,'<:encoding(shiftjis)','file.txt';
波ダッシュ文字「~」でワーニングが出る。shiftjis ではなく cp932 とすること。
perl で UTF-8 テキストファイルに BOM を付ける方法
use utf8;
$text = "○○○○";
open FILE, '>:utf8', 'document.txt';
print FILE "¥x{feff}" unless $text =~ m/^¥x{feff}/; #BOM
print FILE $text;
close FILE;
注意:
UTF-8 のテキストの BOM は { EF BB BF } である。
"¥x{feff}" は、ユニコード の BOM をあらわしており、perl 内部コンパイル時に UTF-8 の BOM { EF BB BF } に変換される。
それがファイルに書き込まれる。
ActivePerl 5.8.8 build 820 カスタム・インストール時のオプション
├─■ Perl ……… 本体なので必須
│ ├─□ Perl ISAPI … ISAPI をサポートする http サーバで高速に動作させる事ができる。Apache でも可能。フツーはイラナイ。
│ ├─□ PerlEX …… IIS用CGIアクセラレーター。Apacheな人はイラナイ。
│ └─□ PerlScript … WSH をPerlで記述するという珍しい人はどうぞ。フツーはイラナイ。
├─■ PPM ………… パッケージマネージャ。部品を追加するのに必要。
├─□ Documentation …… 説明書。どうせ読まないのでイラナイ。
└─□ Examples ……… サンプルコード。どうせ見ないのでイラナイ。
- 最近の ActivePerl は、環境変数 PATH および、拡張子 pl の関連付けはインストーラが自動的に設定してくれる。
昔のように自分でレジストリをいじったりしなくて良い。つまりフツーにインストールすれば、バッチファイル感覚で使えるという事。
リンク