in reply to easy way to extract a hash from an array?

If you are doing a lot of such lookups then you may find it worthwhile to index @PEOPLE.
my %PEOPLE_index; for my $ppl (@PEOPLE) { while ( my ( $k,$v) = each %$ppl ) { push @{$PEOPLE_index{$k}{$v}} => $ppl; } } for my $ppl ( @{$PEOPLE_index{fname}{John}} ) { #.... }