sub to_json { my ($ref) = @_; if(ref($ref) eq "HASH") { return "{".join(",",map { "\"$_\":".to_json($ref->{$_}) } sort keys %$ref)."}"; } elsif(ref($ref) eq "ARRAY") { return "[".join(",",map { to_json($_) } @$ref)."]"; } else { return "null" if ! defined $ref; return $ref if int($ref) eq $ref; my %esc = ( "\n" => '\n', "\r" => '\r', "\t" => '\t', "\f" => '\f', "\b" => '\b', "\"" => '\"', "\\" => '\\\\', "\'" => '\\\'', ); $ref =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g; $ref =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg; return "\"$ref\""; } }