perl5.8.3のunicode環境で日本語の置換え
お助けください。m(__)m
perl5.8.3環境で、utf-8にて書かれたperl内での日本語置換えの質問です。
テキストファイルを「abc.dat」、処理するperlファイルを「rep.cgi」とします。
abc.datを読み込み、ファイル内の文字列「abc」を「あいう」に置換えする部分を「$rep =~ s/abc/あいう/;」とすると、置換えはうまくいっているようなのですが、abc.datに書かれた置換え以降の日本語が文字化けします。
原因はいったいどこにあるのでしょう??
【テキストファイル abc.dat】文字コードUTF-8、改行コードLF
<div>
<p>abc</p>
<p>あいう</p>
</div>
【perlファイル rep.cgi】文字コードUTF-8、改行コードLF
use utf8;
use Encode;
open(TMPL,"<:encoding(utf8)","abc.dat") || die('Error');
while (<TMPL>) { $rep .= $_; }
close(TMPL) || die('Error');
$str = 'あいう';
$rep =~ s/abc/$str/;
print $rep;
【結果】
<div>
<p>あいう</p>
<p>ããã</p>
</div>
お礼
ホントだ、書けますね。 でも、完全UNICODEアプリケーションとしてのPerlがほしいのです。 ファイル一覧をUNICODEで受け取ってくれる。 UTF8で書いても、ファイルリストはShift_JISで入ってきますので、文字化けです。 EUCで書いても同じです。