use Data::Dumper; my $AoH = [ { name => "Bob", gender => "M" }, { name => "Sue", gender => "F" }, { name => "Mike", gender => "M" } ]; my ($men, $women); map {(push @{($_->{"gender"} eq "M") ? $men : $women}, $_)} @$AoH; print Dumper($men); print Dumper($women);