in reply to Using Data::Dumper with a HoH

Hi chinamox,

To follow up on what davorg is saying, make sure you pass %hash to Data::Dumper rather than $hash.

You should get in the habit of passing things to Data::Dumper by reference, as well (ie. as \%hash):

#!/usr/bin/perl -w + use strict; use warnings; use Data::Dumper; + my %hash; my ($w1, $w2, $w3) = ("blue", "marbles", "lottery"); my $count = 17; my $tot_counts = 42; + $hash{$w1}{$w2} = { total_counts => $tot_counts, words => { $w3 => $count } }; + # Use the reference of the hash (\%hash) rather than # just the hash values (%hash). # print Dumper(\%hash); __END__ == Output == $VAR1 = { 'blue' => { 'marbles' => { 'total_counts' => 42, 'words' => { 'lottery' => 17 } } } };

And as davorg also alluded to, if you had put use strict at the beginning of your program, you could have caught the error already.

Try running the following program, and then run it without "use strict" and "use warnings":

#!/usr/bin/perl -w + use strict; use warnings; use Data::Dumper; + my %hash = ( 'test', 'program' ); print Dumper($hash); # Error: should be \%hash + __END__ == Output == Global symbol "$hash" requires explicit package name at hash_test line + 8.

s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

Replies are listed 'Best First'.
Re^2: Using Data::Dumper with a HoH
by chinamox (Scribe) on Oct 30, 2006 at 12:02 UTC

    Thank you for your advice and examples. I actually do use strict and use warnings normally. I had actually cut and pasted some code over and was working on figuring out how I was going to access the HoH. Unfortunately I didn't copy over the entire header like I should have.

    Also I will now use refrences with Data::Dumper from now on.

    Thank you,

    -mox

      It might behoove you to take the time to set up a skeleton Perl script and configure whatever editor you use to use that when you create a new Perl program (and if your editor doesn't support doing that, get a better editor).

      #!/usr/bin/perl use strict; use warnings; use Data::Dumper qw( Dump ) ## Or . . . #use YAML::Syck qw( Load Dump ); ### ### CODE GOES IN HERE ### exit 0; __END__

      Many editors will make it possible that your cursor winds up with the "CODE GOES IN HERE" portion selected (so that it's replaced when you start typing or paste), or just after it.