You want to print out a data structure.
If the output's legibility and layout are important, write your own custom printing routine.
If you are in the Perl debugger, use the x
command:
DB<1> $reference = [ { "foo" => "bar" }, 3, sub { print "hello, world\n" } ]; DB<2> x $reference
0 ARRAY(0x1d033c)
0 HASH(0x7b390)
'foo' = 'bar'>
1 3
2 CODE(0x21e3e4)
- & in ???>
From within your own programs, use the Dumper
function from the CPAN module Data::Dumper:
use Data::Dumper; print Dumper($reference);
Sometimes you'll want to make a dedicated function for your data structure that delivers a particular output format, but often this is overkill. If you're running under the Perl debugger, the x
and X
commands provide nice pretty-printing. The x
command is more useful because it works on both global and lexical variables, whereas X
only works on globals. Pass x
a reference to the data structure you want to print.
D<1> x \@INC
0 ARRAY(0x807d0a8)
0 '/home/tchrist/perllib'
1 '/usr/lib/perl5/i686-linux/5.00403'
2 '/usr/lib/perl5'
3 '/usr/lib/perl5/site_perl/i686-linux'
4 '/usr/lib/perl5/site_perl'
5 '.'
These commands use the dumpvar.pl library. Here's an example:
{ package main; require "dumpvar.pl" } *dumpvar = \&main::dumpvar if __PACKAGE__ ne 'main'; dumpvar("main", "INC"); # show both @INC and %INC
The dumpvar.pl library isn't a module, but we wish it were - so we cajole it into exporting its dumpvar
function anyway. The first two lines forcibly import the main::dumpvar
function from package main
into the current package, assuming it's different. Here's the output of that call:
@INC = (
0 '/home/tchrist/perllib/i686-linux'
1 '/home/tchrist/perllib'
2 '/usr/lib/perl5/i686-linux/5.00404'
3 '/usr/lib/perl5'
4 '/usr/lib/perl5/site_perl/i686-linux'
5 '/usr/lib/perl5/site_perl'
6 '.'
)
%INC = (
'dumpvar.pl' = '/usr/lib/perl5/i686-linux/5.00404/dumpvar.pl'
'strict.pm' = '/usr/lib/perl5/i686-linux/5.00404/strict.pm'
)
The Data::Dumper module, located on CPAN, has a more flexible solution. It provides a Dumper
function that takes a list of references and returns a string with a printable (and eval
able) form of those references.
use Data::Dumper; print Dumper(\@INC);
$VAR1 = [
'/home/tchrist/perllib',
'/usr/lib/perl5/i686-linux/5.00403',
'/usr/lib/perl5',
'/usr/lib/perl5/site_perl/i686-linux',
'/usr/lib/perl5/site_perl',
'.'
];
Data::Dumper supports a variety of output formats. Check its documentation for details.
The documentation for the CPAN module Data::Dumper; the section "The Perl Debugger" from Chapter 8 of Programming Perl or perldebug (1)