## tested now (had the sort backwards) my %domain; foreach my $address (@addresses) { my ($name, $host) = split(/\@/, $address); push @{$domain{$host}},$address } foreach my $host (sort { $#{$domain{$b}} <=> $#{$domain{$a}} } keys %domain) { mailout(@{$domain{$host}}); }