みなさん、初めまして。泥造です。
ActivePerl で UTF-32BE 出力する際、出力を binmode にしないと
0x0A が 0x00 0x00 0x00 0x0A 0x0D に変換されてしまうのですが、
これは Perl のバグになるのでしょうか、それとも Windows ユーザ
が気をつけてコーディングすべき問題? Windows 固有の問題だと
思うので、仕様の穴をついてしまった・そこまで考えて perl 作って
ねーよって感じでしょうか。
--- test1.pl これは NG ---
use strict;
my($fin, $fout) = @ARGV;
open(FIN, "<:utf8", $fin) or die;
open(FOUT, ">:encoding(UTF-32BE)", $fout) or die;
while(<FIN>){
print FOUT;
}
close FIN;
close FOUT;
--- test2.pl これは OK ---
use strict;
use Encode qw(encode);
my($fin, $fout) = @ARGV;
open(FIN, "<:utf8", $fin) or die;
open(FOUT,">:raw", $fout) or die;
while(<FIN>){
print FOUT encode("UTF-32BE", $_);
}
close FIN;
close FOUT;
僕はたまたま test2.pl のように書いていて、別の人は test1.pl の
ように書いていて、なんで動作が違うかなぁ、と悩んでしまいました。
test1.pl のほうがスマートではあるけど、
open(FOUT, ">:encoding(UTF-32BE):raw", $fout)
とか書けないみたいだし、残念です。
--
泥造 FZH01112@...