use strict; use warnings; use Data::Dumper; my @xml_files = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [$_, (split /_/, $_)[1]] } ; print Dumper \@xml_files; __DATA__ 123_20070303_REFNUM.xml 123_20071225_REFNUM.xml 123_20080101_REFNUM.xml 923_20070227_REFNUM.xml