my %h1 = ( 'Jan' => 'a', 'Feb' => 'b', ... 'Dec' => 'l', ); my %h2 = ( 'a' => 'Jan', 'b' => 'Feb', ... 'l' => 'Dec', ); my @sorted_dates = grep { s/^(.)(\d\d)/$e{$1} . ' ' . sprintf("%d",$2)/e } sort grep { s/^(.{3}) (\d\d?)/$d{$1} . sprintf("%02d",$2)/e; } @dates;