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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access