my %servers; while (<>) { chomp; next unless 3 == my ($server, $loc, $country) = split /,\s*/; push @{$servers{$server}}, [$loc, $country]; } local $" = " "; while (my ($server, $info) = each %servers) { print "$server\n"; print "\t@$_\n" foreach @$info; }