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