#!/usr/bin/perl use strict; use warnings; my @unsorted = ( qw (Psdf lPik Easd aKwe SSdf eqwer scfgh Oegb rqwer T) ); my %order = map {$_ => /[r-z]/ ? 'A' : /[a-q]/ ? 'B' : /[R-Z]/ ? 'C' : 'D'} ('a'..'z', 'A'..'Z'); my @sorted = map { substr($_ , 1) } sort map { $order{ substr($_,0,1) } . $_ } @unsorted; print "$_\n" for @sorted;