use strict; sub create_obj { my $self = {}; bless $self; return $self; } my $obj1 = create_obj(); my $obj2 = create_obj(); my $obj3 = create_obj(); $obj1->{DATE}="2005-01-01"; $obj2->{DATE}="2004-12-20"; $obj3->{DATE}="2005-01-02"; sub sort_rule { my ($year1,$month1,$day1) = split /-/,$a->{DATE}; my ($year2,$month2,$day2) = split /-/,$b->{DATE}; return $year1 <=> $year2 or $month1 <=> $month2 or $day1 <=> $day2 ; } my @list = ($obj1,$obj2,$obj3); print $_->{DATE},"\n" for sort sort_rule @list;