use warnings; use strict; my %domains; while (my $line = ) { chomp $line; my ($name, $domain) = split /@/, $line; $domains{$domain} = [] if ! defined $domains{$domain}; push @{$domains{$domain}}, $line; } while (%domains) { for my $domain (keys %domains) { print ((shift @{$domains{$domain}}) . "\n"); delete $domains{$domain} if ! @{$domains{$domain}}; } } __DATA__ ads@domain.com ads@domain.com ads@domain1.com ads@domain1.com ads@domain2.com ads@domain2.com