use strict; use warnings; my %names = ( X => { A => [ [ qw( Gay Deceiver Head Honcho ) ], [ qw( Chill Blaine Corporate Pawn ) ], [ qw( Tuesday Next Government Agent ) ], [ qw( Harry Hoo Freelance PI ) ], ], B => [ [ qw( Wiley Coyote Acme Addict ) ], [ qw( Gay Divorcee Party Animal ) ], ], }, Y => { A => [ [ qw( Maxwell Smart Agent 86 ) ], ], }, ); for my $key1 (keys %names) { for my $key2 (keys %{ $names{$key1} }) { for my $row_ref (@{ $names{$key1}{$key2} }) { if ($row_ref->[0] eq 'Gay') { print 'Found: ', $row_ref->[0], ' ', $row_ref->[1], "\n"; } } } }