use strict; use warnings; use Data::Dumper my $header = ; #capture the header line my @headers = split(/\t+/,$header); while(my $line = ){ my @records = split(/\t+/,$line); # print "@records"; push @recordsArray,@records; } #I lost control #my @sorted_array = map{$_->[0]} sort{$a->[1] <=> $b->[1]} map{[$_, split /\t+/]} @recordsArray; #the only little bit of the above line which is operational my @sorted_array = map{split(/\t/, $_)} @recordsArray; print join("\t", @headers); print join("\t",@sorted_array); #print Dumper(\@recordsArray); __DATA__ ID distance score value start stop done remaining N_425 614 17.01 425 40 12 308 322 N_542 1290 18.74 542 53 15 237 251 N_372 870 15.66 372 80 15 262 276 N_236 814 15.65 236 69 13 185 200