use Test::More; use_ok('Data::Dumper'); use_ok('JSON'); { package Wrapper; use fields qw ( _value ); sub new{ my $s = $_[0]; unless (ref $s) { $s = fields::new($s); } $s->{_value} = 42; return $s; } sub TO_JSON{ return $_[0]->{_value}; } } my $t = Wrapper->new(); my $jsonString = undef; eval{ my $json = JSON->new; $json->allow_nonref(1); $json->utf8(1); $json->convert_blessed(1); $json->allow_blessed(1); $jsonString = $json->encode($t); }; if($@){ print(Dumper($@)); fail("We got an error"); } print $jsonString; done_testing();