use strict; use warnings; my %h; while () { chomp; @_ = split /, /, $_, 2; push @{$h{lc($_[0])}}, $_[1]; } for (sort keys %h) { print "$_\n"; print " $_\n" for sort @{$h{$_}}; print "\n"; } __DATA__ server_A, Perl, UK server_A, Word, UK server_A, Outlook, UK server_A, Excel, UK server_B, Reuters, NL server_B, TradeXL, NL server_B, Thompsons, NL server_B, Bloomberg, NL server_B, Tibco, NL server_c, BasketLink, USA server_c, Evolution, USA server_c, Lotus, USA server_c, TIB, USA server_A, Python, UK