What is Perl's equivalent to PHP's print_r()? What is Perl's equivalent to PHP's print_r()? php php

What is Perl's equivalent to PHP's print_r()?


Note @tchrist recommends Data::Dump over Data::Dumper. I wasn't aware of it, but from the looks of it, seems like it's both far easier to use and producing better looking and easier to interpret results.

Data::Dumper :

A snippet of the examples shown in the above link.

use Data::Dumper;package Foo;sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};package Fuz;                       # a weird REF-REF-SCALAR objectsub new {bless \($_ = \ 'fu\'z'), $_[0]};package main;$foo = Foo->new;$fuz = Fuz->new;$boo = [ 1, [], "abcd", \*foo,         {1 => 'a', 023 => 'b', 0x45 => 'c'},          \\"p\q\'r", $foo, $fuz];######### simple usage########$bar = eval(Dumper($boo));print($@) if $@;print Dumper($boo), Dumper($bar);  # pretty print (no array indices)$Data::Dumper::Terse = 1;          # don't output names where feasible$Data::Dumper::Indent = 0;         # turn off all pretty printprint Dumper($boo), "\n";$Data::Dumper::Indent = 1;         # mild pretty printprint Dumper($boo);$Data::Dumper::Indent = 3;         # pretty print with array indicesprint Dumper($boo);$Data::Dumper::Useqq = 1;          # print strings in double quotesprint Dumper($boo);


As usually with Perl, you might prefer alternative solutions to the venerable Data::Dumper:

  • Data::Dump::Streamer has a terser output than Data::Dumper, and can also serialize some data better than Data::Dumper,
  • YAML (or Yaml::Syck, or an other YAML module) generate the data in YAML, which is quite legible.

And of course with the debugger, you can display any variable with the 'x' command. I particularly like the form 'x 2 $complex_structure' where 2 (or any number) tells the debugger to display only 2 levels of nested data.


An alternative to Data::Dumper that does not produce valid Perl code but instead a more skimmable format (same as the x command of the Perl debugger) is Dumpvalue. It also consumes a lot less memory.

As well, there is Data::Dump::Streamer, which is more accurate in various edge and corner cases than Data::Dumper is.