open my $fh, "<$file"; read $fh, my $data, -s $file; my $transposed = ''; for ( my $l=length( $data ), my $i = 0; $i < $l; $i++ ) { my $chr = substr( $data, $i, 1 ); my $ascii = ord( $chr ); if ( $chr eq "\n" ) { $transposed .= $chr; next; } if ( ( $ascii < 32 ) or ( $ascii > 126 ) ) { # e.g. ctrlc becomes '\003' $transposed .= '\' . Lzro3( $ascii ); } else { # escape backslash to make it easier to translate back again ( $chr eq '\' ) and $chr .= '\'; $transposed .= $chr; } } sub Lzro3 { my $n = shift; ( $n < 10 ) and return '00' . $n; ( $n < 100 ) and return '0' . $n; return $n; }