use strict; use warnings; chomp(my @title = split /\s+/, ); my %emp; while () { chomp(my @r = split/\s+/); push @{$emp{$r[0]}}, [ @r[1..$#r] ]; } foreach (reverse sort keys %emp) { print "$_"; foreach (@{$emp{$_}}) { print "\t$_->[0]\t$_->[1]\n"; } } __DATA__ EmpNum LOCATION Shift 23 54 1 11 65 3 23 54 2