my @AoH_all = ( { name => "Bill", id => 1, }, { name => "Mike", id => 3 }); my @AoH_one = ( { name => "Bill", id => 1, } ); my %keep_ids = map { $_->{id} => 1 } @AoH_all; delete @keep_ids{ map { $_->{id} } @AoH_one }; my @difference = grep { exists $keep_ids{ $_->{id} } } @AoH_all;