$_ = ; chomp; my @hdrs = split /,/; my @recs; while () { chomp; my %rec; @rec{@hdrs} = split /,/; push @recs, \%rec; } #### print "num1\tnum2\tnum3\n"; foreach (sort { $a->{num2} <=> $b->{num2} } @recs) { print "$_->{num1}\t$_->{num2}\t$_->{num3}\n"; }