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.
In reply to Re: passing hash refs
by ikegami
in thread passing hash refs
by fredsnertz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |