Понадобилось написать самобытную сериализацию в JSON. Пока вот так:
# Poor man's JSON
sub serialize {
my ($obj) = @_;
my $result;
if (ref $obj eq 'HASH') {
$result = sprintf( '{ %s }', join(', ', map {
sprintf '"%s": %s', $_, serialize($obj->{$_})
} keys %$obj));
} elsif (ref $obj eq 'ARRAY') {
$result = sprintf('[ %s ]', join(', ', map { serialize($_) } @$obj));
} elsif (!ref $obj) {
if ($obj =~ /^\d+$/) {
$result = $obj;
} else {
$obj =~ s/(["\\])/\\$1/g;
$obj =~ s/\r/\\r/g;
$obj =~ s/\n/\\n/g;
$obj =~ s/\t/\\t/g;
$result = sprintf('"%s"', $obj);
}
}
return $result;
}