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 |