X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdumpvar.pl;h=0268cea8bc8f66ddd5e6bb5234ce13d172ed2a52;hb=d9f203a5233af6609a4b98c6d12d865eadc274ea;hp=474818a657183ed51c9be4307d277c85ed2b71d7;hpb=f338af47923def4d535e1fd32a0aeee66b1f733b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/dumpvar.pl b/lib/dumpvar.pl index 474818a..0268cea 100644 --- a/lib/dumpvar.pl +++ b/lib/dumpvar.pl @@ -41,7 +41,12 @@ sub unctrl { local($v) ; return \$_ if ref \$_ eq "GLOB"; - s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg; + if (ord('A') == 193) { # EBCDIC. + # EBCDIC has no concept of "\cA" or "A" being related + # to each other by a linear/boolean mapping. + } else { + s/([\001-\037\177])/'^'.pack('c',ord($1)^64)/eg; + } $_; } @@ -63,11 +68,19 @@ sub stringify { and %overload:: and defined &{'overload::StrVal'}; if ($tick eq 'auto') { - if (/[\000-\011\013-\037\177]/) { - $tick = '"'; - }else { - $tick = "'"; - } + if (ord('A') == 193) { + if (/[\000-\011]/ or /[\013-\024\31-\037\177]/) { + $tick = '"'; + } else { + $tick = "'"; + } + } else { + if (/[\000-\011\013-\037\177]/) { + $tick = '"'; + } else { + $tick = "'"; + } + } } if ($tick eq "'") { s/([\'\\])/\\$1/g; @@ -80,7 +93,11 @@ sub stringify { } elsif ($unctrl eq 'quote') { s/([\"\\\$\@])/\\$1/g if $tick eq '"'; s/\033/\\e/g; - s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg; + if (ord('A') == 193) { # EBCDIC. + s/([\000-\037\177])/'\\c'.chr(193)/eg; # Unfinished. + } else { + s/([\000-\037\177])/'\\c'._escaped_ord($1)/eg; + } } $_ = uniescape($_); s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $quoteHighBit; @@ -89,6 +106,14 @@ sub stringify { : $tick . $_ . $tick; } +# Ensure a resulting \ is escaped to be \\ +sub _escaped_ord { + my $chr = shift; + $chr = chr(ord($chr)^64); + $chr =~ s{\\}{\\\\}g; + return $chr; +} + sub ShortArray { my $tArrayDepth = $#{$_[0]} ; $tArrayDepth = $#{$_[0]} < $arrayDepth-1 ? $#{$_[0]} : $arrayDepth-1 @@ -274,14 +299,14 @@ sub unwrap { if ($globPrint) { $s += 3; dumpglob($s, "{$$v}", $$v, 1, $m-1); - } elsif (defined ($fileno = fileno($v))) { + } elsif (defined ($fileno = eval {fileno($v)})) { print( (' ' x ($s+3)) . "FileHandle({$$v}) => fileno($fileno)\n" ); } } elsif (ref \$v eq 'GLOB') { # Raw glob (again?) if ($globPrint) { dumpglob($s, "{$v}", $v, 1, $m-1) if $globPrint; - } elsif (defined ($fileno = fileno(\$v))) { + } elsif (defined ($fileno = eval {fileno(\$v)})) { print( (' ' x $s) . "FileHandle({$v}) => fileno($fileno)\n" ); } } @@ -360,7 +385,7 @@ sub dumpglob { unwrap(\%entry,3+$off,$m) ; print( (' ' x $off) . ")\n" ); } - if (defined ($fileno = fileno(*entry))) { + if (defined ($fileno = eval{fileno(*entry)})) { print( (' ' x $off) . "FileHandle($key) => fileno($fileno)\n" ); } if ($all) {