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