my %HoH = (); #Something my @IDs = (); my ($key,$value); while( ($key,$value) = each(%HoH) ) { push(@IDs,$key) if ($HoH{$key}{key1} eq "foo" && $HoH{$key}{key2} eq "bar") || $HoH{$key}{key4} < 10; }