2010年 03月 23日

Perl, utf8 フラグ, ハッシュ, リテラル, =>

miyagawa さんに教えて頂いたのですが、Perl のバグらしく、解決するためには => の左をクオートするか、Perl を 5.12 にすればいいらしいです。

{
    use utf8;
    my $a = [ foo => "bar" ];
    warn utf8::is_utf8($a->[0]); #=> true
    warn utf8::is_utf8($a->[1]); #=> false
};

{
    no utf8;
    my $a = [ foo => "bar" ];
    warn utf8::is_utf8($a->[0]); #=> false
    warn utf8::is_utf8($a->[1]); #=> false
};

死ぬほどハマった。

use Encode;
use HTTP::Request::Common;
use Data::Dumper;

{
    use utf8;
    my $s = encode_utf8("ああああ");
    my $req = POST "/", [ test => $s ];
    warn Dumper $req ;
};

print "\n\n";

{
    no utf8;
    my $s = "ああああ";
    my $req = POST "/", [ test => $s ];
    warn Dumper $req ;
};

みたいなとき、まず気付かない……