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 ...