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}} ) {
#....
}