YAML と YAML::Syck
YAML.pm は Load 対象が flagged だと flagged になるけど、
YAML::Syck は Load 対象が flagged でも bytes になる
use strict; use warnings; use utf8; use Test::More qw(no_plan); use Encode; use YAML; use YAML::Syck; my $yaml_flagged = <<__YAML__; hoge: foo: ばー fuga: ふが __YAML__ ok Encode::is_utf8($yaml_flagged), 'this is flagged'; my $dump_from_yaml = YAML::Load($yaml_flagged); my $dump_from_yamlsyck = YAML::Syck::Load($yaml_flagged); is_deeply $dump_from_yaml, $dump_from_yamlsyck, 'flagged ok?'; my $yaml_bytes = encode( 'utf8', $yaml_flagged ); ok !Encode::is_utf8($yaml_bytes), 'this is bytes'; $dump_from_yaml = YAML::Load($yaml_bytes); $dump_from_yamlsyck = YAML::Syck::Load($yaml_bytes); is_deeply $dump_from_yaml, $dump_from_yamlsyck, 'bytes ok?';
結果
[vkgtaro@finalsparc.local] $ perl test_yaml.pl ok 1 - this is flagged not ok 2 - flagged ok? # Failed test 'flagged ok?' # at test_yaml.pl line 22. Wide character in print at /opt/local/lib/perl5/5.8.8/Test/Builder.pm line 1334. # Structures begin differing at: # $got->{hoge}{fuga} = 'ふが' # $expected->{hoge}{fuga} = 'ãµã' ok 3 - this is bytes ok 4 - bytes ok? 1..4 # Looks like you failed 1 test of 4.