use JSON::PP; use JSON::XS; use JSON::Syck; my $x = 123.1; my $y = '123.10'; my $z = $y + 0; my $h = { x => $x, y => $y, z => $z }; print JSON::PP::encode_json($h) . "\n"; print JSON::XS::encode_json($h) . "\n"; print JSON::Syck::Dump($h) . "\n"; __END__ {"y":"123.10","x":123.1,"z":123.1} #JSON::PP {"y":"123.10","x":123.1,"z":123.1} #JSON::XS {"y":123.10,"x":123.1,"z":123.1} #JSON::Syck ( seems to do $y wrong/differently )