use strict; use warnings; my @unsorted; my @sorted; while(my $file = ){ chomp $file; push @unsorted, $file; } @sorted = map{$_->[0]} sort{$a->[2] <=> $b->[2]} map{[$_, split/sequence/]} @unsorted; print join("\n",@sorted); __DATA__ sequence3.gb.txt sequence1.gb.txt sequence7.gb.txt sequence5.gb.txt sequence2.gb.txt sequence4.gb.txt sequence10.gb.txt sequence9.gb.txt sequence8.gb.txt