my @list = ( '1,cat', '2,dog', '22,mouse', '11,eel', '001,elk', '13,mink'); my %unsorted = map { split /,/ } @list ; my @sorted = map { $_.','.$unsorted{$_} } sort { $a <=> $b } keys %unsorted;