diff --git a/lib/YAML/PP/Schema.pm b/lib/YAML/PP/Schema.pm index 0a9f5362..c2348962 100644 --- a/lib/YAML/PP/Schema.pm +++ b/lib/YAML/PP/Schema.pm @@ -67,6 +67,7 @@ sub new { coderef => undef, glob => undef, tied_equals => {}, + bool => undef, ); my $self = bless { yaml_version => $yaml_version, @@ -238,13 +239,13 @@ sub add_representer { push @$rep, [ $args{class_matches}, $args{code} ]; return; } + if (my $bool = $args{bool} and $] >= 5.036000) { + $representers->{bool} = { + code => $args{code}, + }; + return; + } if (my $class_equals = $args{class_equals}) { - if ($] >= 5.036000 and $class_equals eq 'perl_experimental') { - $representers->{bool} = { - code => $args{code}, - }; - return; - } my $rep = $representers->{class_equals}; $rep->{ $class_equals } = { code => $args{code}, diff --git a/lib/YAML/PP/Schema/Core.pm b/lib/YAML/PP/Schema/Core.pm index dc61a127..0bed290e 100644 --- a/lib/YAML/PP/Schema/Core.pm +++ b/lib/YAML/PP/Schema/Core.pm @@ -97,6 +97,13 @@ sub register { if ($schema->bool_class) { for my $class (@{ $schema->bool_class }) { + if ($class eq 'perl_experimental') { + $schema->add_representer( + bool => $class, + code => \&represent_bool, + ); + next; + } $schema->add_representer( class_equals => $class, code => \&represent_bool, diff --git a/t/14.load-bool.t b/t/14.load-bool.t index 75560f5a..feb1ecd6 100644 --- a/t/14.load-bool.t +++ b/t/14.load-bool.t @@ -47,4 +47,13 @@ SKIP: { is(! $data_jp->{FALSE}, 1, 'JSON::PP::Boolean false'); } +SKIP: { + skip "perl 5.36 required for this test", 3 unless $] >= 5.036000; + my $is_bool = eval 'use experimental qw/ builtin /; sub { builtin::is_bool($_[0]) }'; + my $ypp = YAML::PP->new(boolean => 'perl_experimental'); + my $data_jp = $ypp->load_string($yaml); + ok $is_bool->($data_jp->{TRUE}) && $data_jp->{TRUE}, 'builtin::is_bool truw'; + ok $is_bool->($data_jp->{FALSE}) && ! $data_jp->{FALSE}, 'builtin::is_bool false'; +} + done_testing;