use charnames (); sub escape_str { my $str = shift; $str =~ s{([^\0-\177])}{_N_escape($1)}eg; return $str; } sub _N_escape { return '\N{' . charnames::viacode(ord($_[0])) . '}'; }