use strict; # use schwartzian transform if the size is big my @dates1 = ( '05-11-2006', '01-01-2005' , '04-12-2005' , '22-03-2005'); @dates1 = sort{substr($a,6,4)<=>substr($b,6,4)||substr($a,3,2) <=>substr($b,3,2)||substr($a,0,2)<=>substr($b,0,2)}@dates1; print join("\n",@dates1); print "\n\n"; # this format is easy, it's just alpha-numeric my @dates2 = ( '2005-12-01' , '2005-11-02' , '2005-12-07'); my @dates2 = sort @dates2; print join("\n",@dates2); __OUTPUT__ 01-01-2005 22-03-2005 04-12-2005 05-11-2006 2005-11-02 2005-12-01 2005-12-07