http://www.perlmonks.org?node_id=814649


in reply to Re^2: Finding hashes in hashes of hashes
in thread Finding hashes in hashes of hashes

The 'die' would go after the foreach (refer to the pseudocode that I posted). Note the comments below:

sub get_family_member { my @args = @_; my $who = shift @args; # <-- this var is not used my $families = shift @args; foreach my $family (%families) { if ($families->{$family}->{kid} eq "bart") { # <-- are you sure yo +u want to hard-code 'bart'? I think you need $who return $dfamilies->{$family}->{kid}; # <-- typo in hash name last; # <-- this will never be reached since it already returned } } # no matches found: die here }

Replies are listed 'Best First'.
Re^4: Finding hashes in hashes of hashes
by AnomalousMonk (Archbishop) on Dec 28, 2009 at 20:07 UTC

    bobf is quite right: the statements
        my @args = @_;
        my $who = shift @args;
        my $families = shift @args;
    are much better written as
        my ($who, $families) = @_;

    Also,  $families in the above example seems to be a hash reference,
    so use  %$families to dereference.

    Further,
        for my $family (%$families) { ... }
    won't do what you want; use
        for my $family (keys %$families) { ... }
    to iterate over the keys of the referenced hash.

Re^4: Finding hashes in hashes of hashes
by cyphy (Initiate) on Dec 29, 2009 at 14:26 UTC
    Thank you! About the typo and the who.. This is what happens, when you try to change your code to only reflect relevant parts. Next time I'll simply copy it.