1use strict; 2use warnings; 3use Test::More tests => 4; 4 5BEGIN { 6 $ENV{ PERL_JSON_BACKEND } = 0; 7} 8 9use JSON::PP; 10 11my $json = JSON::PP->new->convert_blessed; 12 13my $obj = OverloadedObject->new( 'foo' ); 14ok( $obj eq 'foo' ); 15is( $json->encode( [ $obj ] ), q{["foo"]} ); 16 17# rt.cpan.org #64783 18my $foo = bless {}, 'Foo'; 19my $bar = bless {}, 'Bar'; 20 21eval q{ $json->encode( $foo ) }; 22ok($@); 23eval q{ $json->encode( $bar ) }; 24ok(!$@); 25 26 27package Foo; 28 29use strict; 30use warnings; 31use overload ( 32 'eq' => sub { 0 }, 33 '""' => sub { $_[0] }, 34 fallback => 1, 35); 36 37sub TO_JSON { 38 return $_[0]; 39} 40 41package Bar; 42 43use strict; 44use warnings; 45use overload ( 46 'eq' => sub { 0 }, 47 '""' => sub { $_[0] }, 48 fallback => 1, 49); 50 51sub TO_JSON { 52 return overload::StrVal($_[0]); 53} 54 55 56package OverloadedObject; 57 58use overload 'eq' => sub { $_[0]->{v} eq $_[1] }, '""' => sub { $_[0]->{v} }, fallback => 1; 59 60 61sub new { 62 bless { v => $_[1] }, $_[0]; 63} 64 65 66sub TO_JSON { "$_[0]"; } 67 68