作者: dune
日時: 2009/5/15(19:09)
みなさん、初めまして。泥造です。

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@...