sub _scalar_to_string { my $s = shift; return 'null' unless defined $s; if (ref $s) # object other than plain HASH, ARRAY, or SCALAR? { #... (this is something JSON doesn't handle) } elsif (looks_like_number($s)) { return $s } else { eval { $s = "" . $s; $s =~ s[\\][\\\\]g; ### error points here $s =~ s["][\\"]g; $s =~ s[\n][\\n]g; $s =~ s[[\b]][\\b]g; $s =~ s[\f][\\f]g; $s =~ s[\r][\\r]g; $s =~ s[\t][\\t]g; $s =~ s[([^[:print:]])][sprintf "\\u%04x", ord $1]eg; 1; } and return qq["$s"]; return qq[":$@:$s"]; } }