in reply to passing hash refs

You wouldn't have had this problem had you not disabled strictures by omitting use strict;. Use use strict;!!!

You did $$hash_ref{$key} in one place and $hash_ref{$key} in the other. The latter accesses the (non-existant) hash %hash_ref, not the hash referenced by $hash_ref.

By the way, $hash_ref->{$key} is a clearer way or writing $$hash_ref{$key}.

And since you already have $hash_ref->{$key} in $val, @{ $hash_ref->{$key} } can be written as @{$val} and @$val.

Cleaned up code:

#!/usr/bin/perl use strict; use warnings; my $hash_ref = set_up(); foreach my $key (keys %{$hash_ref}) { my $val = $hash_ref->{$key}; if (ref($val)) { print "total '$key' = ", scalar @{$val}, "\n"; foreach my $act (@{$val}) { print "\t$act\n"; } } else { print "$key - $val\n"; } } sub set_up { return { one => "cat", two => "dog", actions => [ "feed", "walk", "pet", "groom" ], }; }

In case you don't know, Data::Dumper is your friend when you need to debug a data structure such as the one you are building.

Update: Added code.

Replies are listed 'Best First'.
Re^2: passing hash refs
by fredsnertz (Initiate) on Apr 08, 2009 at 16:00 UTC
    Thank you! I will look into Data::Dumper.