Rate this page

Flattr this

Dump the content of an arbitrary Perl data structure

Tested on

Debian (Etch, Lenny, Squeeze)
Fedora (14)
Ubuntu (Hardy, Intrepid, Jaunty, Karmic, Lucid, Maverick, Natty, Precise, Trusty)

Objective

To dump the content of an arbitrary Perl data structure to STDERR.

Scenario

Suppose that you are attempting to troubleshoot a Perl script and need to inspect the content of a data structure referenced by the variable $data. You know what the layout of this data structure should be, however there is a significant possibility that it has not been constructed as intended.

Method

You can dump the content of a Perl data structure using the Data::Dump module. First the module must be installed. On Debian-based systems it is located in the package libdata-dump-perl:

apt-get install libdata-dump-perl

The next step is to load the module. The specific function that you need to import is called dump:

use Data::Dump qw(dump);

You should now be able to inspect any data structure by passing it to dump:

my $data = {username=>'user',password=>'xyzzy'};
dump $data;

If dump is evaluated in a void context then the output will be sent to STDERR. In this particular example it should look similar to:

{ password => "xyzzy", username => "user" }

This is an executable fragment of Perl code which, if evaluated using eval, would reconstruct a copy of the original data structure.

Variations

Dump to a location other than STDERR

When evaluated in a non-void context dump returns its output as a string instead of writing it to STDERR. You can then use it in whatever manner is appropriate, for by example sending it to syslog:

use Data::Dump qw(dump);
use Sys::Syslog;

my $data = {username=>'user',password=>'xyzzy'};

openlog($0,'',LOG_USER);
syslog(LOG_DEBUG,dump($data));
closelog;

Tags: perl