Hack #71. Inspect Your Data Structures

Peek into a reference and see how far down it goes.

How do you know the structure of a Perl reference? Is the reference to a hash, an array, an object, a scalar, or something else? Many people suggest the use of Data::Dumper. This module has a method that dumps the data structure as a text string. It works very well, but its main purpose is to serialize a data structure into a string you can eval to recreate the reference and its data.

Most of the time I don't want to save state or eval anything. I just want to see a text representation of the reference. I really like the representation of a data structure that using the x command within the Perl debugger provides.

Dumping References Outside the Debugger

Is it possible to produce this from a Perl program without using the debugger? Yes!

use strict;
use Dumpvalue;

my $d    = Dumpvalue->new( );
my $hash =
{
     first_name => 'Tim',
     last_name  => 'Allwine',
     friends    => [ 'Jon','Nat','Joe' ],
};
$d->dumpValue(\\$hash);

This produces the output:

-> HASH(0x80a190)
    'first_name' => 'Tim'
    'friends' => ARRAY(0x800368)
       0  'Jon'
       1  'Nat'
       2  'Joe'
    'last_name' => 'Allwine'

This is the same output that the debugger produces. The HASH line says that $hash is a hash reference. The next level of indentation shows the keys of the hash and their corresponding values. first_name for example points to the string Tim but friends points to an array reference. The contents of that array appear, one at a time, indented one step further ...

Get Perl Hacks now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.