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