use Time::Local; my %months; @months{('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec')} = 0..11; my @lines = map{ $_->[1] } sort{ $a->[0] <=> $b->[0] } map{ chomp; my $val = $_; $val =~ s#webadmin_([^\.]+)\.log#my @t=split(/_/,$1);timelocal(0,0,0,$t[1],$months{$t[0]},($t[2]-1900))#e; [$val,$_]; }; print "$_\n" for(@lines); __DATA__ webadmin_jul_10_2007.log webadmin_jul_11_2007.log webadmin_jul_12_2007.log webadmin_jul_13_2007.log webadmin_jul_14_2007.log webadmin_jul_7_2007.log webadmin_jul_8_2007.log webadmin_jul_9_2007.log #### webadmin_jul_7_2007.log webadmin_jul_8_2007.log webadmin_jul_9_2007.log webadmin_jul_10_2007.log webadmin_jul_11_2007.log webadmin_jul_12_2007.log webadmin_jul_13_2007.log webadmin_jul_14_2007.log