X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdumpvar.pl;h=34a9c5971b7b4615abe35d061c6b92c775384b78;hb=f8543d02b547a2763330f0ee30b25144a6fc1218;hp=c918f2ba467d85edec504c585e70e3c7849cfecd;hpb=600d99fa249bb9ea83f068d4a70954217a9361a3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/dumpvar.pl b/lib/dumpvar.pl index c918f2b..34a9c59 100644 --- a/lib/dumpvar.pl +++ b/lib/dumpvar.pl @@ -44,6 +44,12 @@ sub unctrl { $_; } +sub uniescape { + join("", + map { $_ > 255 ? sprintf("\\x{%04X}", $_) : chr($_) } + unpack("U*", $_[0])); +} + sub stringify { local($_,$noticks) = @_; local($v) ; @@ -67,6 +73,7 @@ sub stringify { } elsif ($unctrl eq 'unctrl') { s/([\"\\])/\\$1/g ; s/([\000-\037\177])/'^'.pack('c',ord($1)^64)/eg; + # uniescape? s/([\200-\377])/'\\0x'.sprintf('%2X',ord($1))/eg if $quoteHighBit; } elsif ($unctrl eq 'quote') { @@ -74,6 +81,7 @@ sub stringify { s/\033/\\e/g; s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg; } + $_ = uniescape($_); s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $quoteHighBit; ($noticks || /^\d+(\.\d*)?\Z/) ? $_