This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #124091] PP Data::Dumper fails on \n isolate
authorKarl Williamson <khw@cpan.org>
Tue, 17 Mar 2015 21:44:03 +0000 (15:44 -0600)
committerKarl Williamson <khw@cpan.org>
Wed, 18 Mar 2015 15:44:16 +0000 (09:44 -0600)
Commit 31ac59b61698e704b64192de74793793f4b5b0c0 inadvertently changed
the behavior of the pure perl version of Data::Dumper.  If a newline is
the sole character in something being dumped with useqq, it no longer
got translated into a \n sequence and was output raw.  This was due to
the regex matching of \n at beginning and ends of strings.

dist/Data-Dumper/Dumper.pm
dist/Data-Dumper/t/dumper.t

index 0ea2e77..e884298 100644 (file)
@@ -761,7 +761,7 @@ sub qquote {
        # this.
        || (! $IS_ASCII && $] ge 5.008_001 && utf8::is_utf8($_));
 
-  return qq("$_") if / ^ [[:print:]]* $ /x;    # fast exit
+  return qq("$_") unless /[[:^print:]]/;  # fast exit if only printables
 
   # Here, there is at least one non-printable to output.  First, translate the
   # escapes.
index fa3ce97..14f92dd 100644 (file)
@@ -108,7 +108,7 @@ sub SKIP_TEST {
   ++$TNUM; print "ok $TNUM # skip $reason\n";
 }
 
-$TMAX = 444;
+$TMAX = 450;
 
 # Force Data::Dumper::Dump to use perl. We test Dumpxs explicitly by calling
 # it direct. Out here it lets us knobble the next if to test that the perl
@@ -1746,3 +1746,12 @@ EOT
         TEST (q(Data::Dumper::DumperX($foo)), 'EBCDIC outlier control: DumperX') if $XS;
     }
 }
+############# [perl #124091]
+{
+        $WANT = <<'EOT';
+#$VAR1 = "\n";
+EOT
+        local $Data::Dumper::Useqq = 1;
+        TEST (qq(Dumper("\n")), '\n alone');
+        TEST (qq(Data::Dumper::DumperX("\n")), '\n alone') if $XS;
+}