my %HoH = ( 1 => +{ foo => 'bar', baz => 'bletch', }, 2 => +{ foo => 'bar2', baz => 'bletch2', }, ); my @fookeys; # select 'foo' from 'HoH' where 'foo' = 'bar2' @fookeys = sort { $HoH{$a} -> {foo} eq 'bar2' } keys %HoH; use Data::Dumper; # fookeys is [ 1, 2 ] print Dumper \@fookeys; # try again @fookeys = sort { $HoH{$a}{foo} eq 'bar2' } keys %HoH; # fookeys is [ 1, 2 ] print Dumper \@fookeys;