use warnings; use strict; my @mon_yr = qw/ APR12 MAR13 APR11 MAR12 FEB13 APR13/; my %mon_name = ( 'JAN' => 1, 'FEB' => 2, 'MAR' => 3, 'APR' => 4, # add others if you want ); print join $/ => map { $_->[0] } sort { $a->[2] <=> $b->[2] || $a->[1] <=> $b->[1] } map { /(\w+?)(\d+?)$/; [ $_, $mon_name{$1}, $2 ] } @mon_yr; print $/;