my (%data); while () { my ($submitter, $ticket_number) = split(/\|/); push(@{$data{$submitter}}, $ticket_number); } print "Submitters, by ticket count:\n"; foreach my $sub (sort { scalar $#{$data{$a}} <=> $#{$data{$b}} } keys %data) { print $sub, ": ", scalar $#{$data{$sub}}, "\n"; } print "\n", "Submitters and tickets, ordered by submitter:\n"; foreach my $sub (sort keys %data) { print $sub, ": ", join(", ", @{$data{$sub}}), "\n"; } __DATA__ Joe|1 Joe|2 Gary|3 Gary|4 Kelly|5 Joe|6 Joe|7 #### Submitters, by ticket count: Kelly: 1 Gary: 2 Joe: 4 Submitters and tickets, ordered by submitter: Gary: 3, 4 Kelly: 5 Joe: 1, 2, 6, 7