use t::TestYAML tests => 16;
use YAML::Dumper;
package StrIngy;
use overload '""', sub { 'A Stringy String' };
sub new {bless {}, shift}
package main;
my $object = bless {}, 'StrIngy';
# $\ = "\n";
# print ref($object);
# print "$object";
# print overload::StrVal($object);
# print overload::StrVal(bless {}, 'foo');
# exit;
filters {
node => ['eval_perl' => 'get_info'],
info => ['lines' => 'make_regexp'],
};
run_like node => 'info';
sub eval_perl {
my $perl = shift;
my $stringify = 0;
$stringify = 1 if $perl =~ s/^#\s*//;
my $node = eval $perl;
die "Perl code failed to eval:\n$perl\n$@" if $@;
return ($node, $stringify);
}
sub get_info {
my $dumper = YAML::Dumper->new;
join ';', map {
defined($_) ? $_ : 'undef'
} $dumper->node_info(@_);
}
sub make_regexp {
my $string = join ';', map {
chomp;
s/^~$/undef/;
s/^0x\d+/0x[0-9a-fA-F]+/;
$_;
} @_;
qr/^${string}$/;
}
__DATA__
=== Hash Ref
+++ node: +{1..4};
+++ info
~
HASH
0x12345678
=== Array Ref
+++ node: [1..5]
+++ info
~
ARRAY
0x12345678
=== Scalar
+++ node: 'hello';
+++ info
~
~
0x12345678-S
=== Scalar Ref
+++ node: \ 'hello';
+++ info
~
SCALAR
0x12345678
=== Scalar Ref Ref
+++ node: \\ 'hello';
+++ info
~
REF
0x12345678
=== Code Ref
+++ node: sub { 42; }
+++ info
~
CODE
0x12345678
=== Code Ref Ref
+++ node: \ sub { 42; }
+++ info
~
REF
0x12345678
=== Glob
+++ node: $::x = 5; \ *x;
+++ info
~
GLOB
0x12345678
=== Regular Expression
+++ node: qr{xxx};
+++ info
~
REGEXP
0x12345678
=== Blessed Hash Ref
+++ node: bless {}, 'ARRAY';
+++ info
ARRAY
HASH
0x12345678
=== Blessed Array Ref
+++ node: bless [], 'Foo::Bar';
+++ info
Foo::Bar
ARRAY
0x12345678
=== Blessed Scalar Ref
+++ node: my $b = 'boomboom'; bless ((\ $b), 'Foo::Barge');
+++ info
Foo::Barge
SCALAR
0x12345678
=== Blessed Code Ref
+++ node: bless sub { 43 }, 'Foo::Barbie';
+++ info
Foo::Barbie
CODE
0x12345678
=== Blessed Glob
+++ node: $::x = 5; bless \ *x, 'Che';
+++ info
Che
GLOB
0x12345678
=== Not Stringified Hash Object
+++ node: bless {}, 'StrIngy';
+++ info
StrIngy
HASH
0x12345678
=== Stringified Hash Object
+++ node: # bless {}, 'StrIngy';
+++ info
~
~
0x12345678-S