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