Windows環境 ActivePerl で日本語を使用する


キ・ホ・ン
#!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 ……… サンプルコード。どうせ見ないのでイラナイ。

リンク
perlwin32faq - Perl for Win32 Frequently Asked Questions (FAQ)