use strict; use warnings; my $entries = 0; my %data; while () { chomp; my ($name, $value) = split ' ', $_, 2; push @{$data{$name}}, [$entries++, $value]; } for my $name (sort keys %data) { print "$name\n"; print " $_->[1]\n" for sort {$a->[0] <=> $b->[0]} @{$data{$name}}; } __DATA__ Jim 12 John 15 Peter 08 Andrew 34 Jim 57 Andreas 27 #### Andreas 27 Andrew 34 Jim 12 57 John 15 Peter 08