use DDS; # your $events structure here ... @$events = sort { $a->{month} <=> $b->{month} } @$events; @{$_->{list}} = sort { $a->{date} <=> $b->{date} } @{$_->{list}} for @$events; Dump $events; __output__ $ARRAY1 = [ { list => [ { date => 10, name => 'picnic' }, { date => 15, name => 'high tea' }, { date => 23, name => 'rafting' } ], month => 7, name => 'July' }, { list => [ { date => 12, name => 'golfing' }, { date => 20, name => 'retreat' }, { date => 29, name => 'marathon' } ], month => 8, name => 'August' } ];