Fix Data::Dumper's Fix Terse(1) + Indent(2)
Michael G. Schwern [Thu, 15 Apr 2010 19:29:43 +0000 (21:29 +0200)]
RT #73604: When $Data::Dumper::Terse is true, the indentation is thrown
off. It appears to be acting as if the $VAR1 = is still there.

dist/Data-Dumper/Dumper.pm
dist/Data-Dumper/Dumper.xs
dist/Data-Dumper/t/terse.t [new file with mode: 0644]

index 0eb8bf7..91b335b 100644 (file)
@@ -234,7 +234,7 @@ sub Dumpperl {
     my $valstr;
     {
       local($s->{apad}) = $s->{apad};
-      $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2;
+      $s->{apad} .= ' ' x (length($name) + 3) if $s->{indent} >= 2 and !$s->{terse};
       $valstr = $s->_dump($val, $name);
     }
 
index e3867a1..f2c1821 100644 (file)
@@ -1179,7 +1179,7 @@ Data_Dumper_Dumpxs(href, ...)
                        sv_catpvn(name, tmpbuf, nchars);
                    }
                
-                   if (indent >= 2) {
+                   if (indent >= 2 && !terse) {
                        SV * const tmpsv = sv_x(aTHX_ NULL, " ", 1, SvCUR(name)+3);
                        newapad = newSVsv(apad);
                        sv_catsv(newapad, tmpsv);
@@ -1193,7 +1193,7 @@ Data_Dumper_Dumpxs(href, ...)
                            freezer, toaster, purity, deepcopy, quotekeys,
                            bless, maxdepth, sortkeys);
                
-                   if (indent >= 2)
+                   if (indent >= 2 && !terse)
                        SvREFCNT_dec(newapad);
 
                    postlen = av_len(postav);
diff --git a/dist/Data-Dumper/t/terse.t b/dist/Data-Dumper/t/terse.t
new file mode 100644 (file)
index 0000000..8d3ad48
--- /dev/null
@@ -0,0 +1,22 @@
+#!perl
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use Data::Dumper;
+
+my $hash = { foo => 42 };
+
+for my $useperl (0..1) {
+    my $dumper = Data::Dumper->new([$hash]);
+    $dumper->Terse(1);
+    $dumper->Indent(2);
+    $dumper->Useperl($useperl);
+
+    is $dumper->Dump, <<'WANT', "Terse(1), Indent(2), Useperl($useperl)";
+{
+  'foo' => 42
+}
+WANT
+}