1## ---------------------------------------------------------------------------- 2# esc.pl 3# ----------------------------------------------------------------------------- 4# require 'esc.pl' 5# (used from t/*.t) 6# (ja:) (t/*.t でつかってたり) 7# ----------------------------------------------------------------------------- 8# escapes coltroll characters. 9# esc() effects only 0x00-0x7F. 10# escfull() effect all chats includes utf-8 char which will be in \x{hh} format. 11# (ja:) 制御文字とかをエスケープする. 12# (ja:) 0x80以降は残す時は esc で, 13# (ja:) 全部エスケープする時は escfull . 14# ----------------------------------------------------------------------------- 15 16sub esc 17{ 18 my $str = shift; 19 $str =~ s/\\/\\\\/g; 20 $str =~ s/\n/\\n/g; 21 $str =~ s/\e/\\e/g; 22 $str =~ s/\r/\\r/g; 23 $str =~ s/\0/\\0/g; 24 $str =~ s/([\x00-\x1f\x7f])/sprintf('\x%02x',ord($1))/ge; 25 $str; 26} 27 28sub escfull 29{ 30 my $str = shift; 31 $str =~ s/\\/\\\\/g; 32 $str =~ s/\n/\\n/g; 33 $str =~ s/\e/\\e/g; 34 $str =~ s/\r/\\r/g; 35 $str =~ s/\0/\\0/g; 36 $str =~ s/([\x00-\x1f\x7f-\xff])/sprintf('\x%02x',ord($1))/ge; 37 $str =~ s/([^\x00-\xff])/sprintf('\x{%02x}',ord($1))/ge; 38 $str; 39} 40 411; 42