ActivePerl の正規表現周りで日本語使うとうまく処理できないことがある。
"ー" のように2バイト目が "[" になっているものなんかがそうで。
Perl-5.8 MEMO - 日本語を含むスクリプトを書く
に対応策が載っていたけど。やってみるとアプリケーションが落ちたり。
jperlですな
こういうことやんないとだめですか?
先日は結局解決しなかったので、再度調べてみる。
要件としては
・Shift-JIS のファイルを 入力/出力したい
・Perl スクリプト自体は Shift-JIS が望ましいが、無理なら EUC でも UTF-8 でも構わない
という状態で。
とりあえずスクリプトに "ー" が含まれるような場合に正しく動作させたければスクリプトを EUC か UTF-8 にすれば良いらしい。
さて、この状態で Shift-JIS が扱えるかだ。
Shift-JISテキストを正しく扱う
ああ。Jcode.pm とかで変換かければいいのかな。ということで、
Jcode.pmをWindows 2000でコンパイルする
から Jcode.pm を DL してさくっと導入。
# shift-jis 対策
use jcode;
open IN, "<$filename" or die $!;
@lines = ;
close IN;
foreach $line (@lines){
Jcode::convert(\$line, "euc");
}
open OUT, ">$filename.euc" or die $!;
print OUT @lines;
close OUT;
# 本処理
use encoding "euc-jp";
とかやってみるけど、やっぱりうまくいかない。
Perl 5.8 Documentation - perljp - 日本語 Perl ガイド
見て、
open (IN, "<:encoding(shiftjis)", "$filename");
とかできそうな気がして実験。失敗。
・・・と思いきや、ただのコーディングミスと判明。
最後に書いた方法でよさげ。