BEGIN { use Regex::PreSuf; my %escape = ( "\n" => '\\n', "\t" => '\\t', "\\" => '\\\\'); my $escape = presuf(keys %escape); my %unescape = reverse %escape; my $unescape = presuf(keys %unescape); sub escape { local $_ = shift; s/($escape)/$escape{$1}/go; $_; } sub unescape { local $_ = shift; s/($unescape)/$unescape{$1}/go; $_; } }