#! perl -slw use strict; my @data = qw[ alpha bravo charlie delta east echo exit foxtrot golf hotel india juliet kilo lima mike november oscar papa quebec romeo sierra tango uniform victor whiskey xray yankee zulu ]; my @sortedData; my @rindex = grep{ $data[ $_ ] =~ m[r] } 0 .. $#data; my @rsorted = sort{ $data[ $a ] cmp $data[ $b ] } @rindex; @sortedData[ @rindex ] = @data[ @rsorted ]; my @eindex = grep{ $data[ $_ ] !~ m[r] && $data[ $_ ] =~ m[^e] } 0 .. $#data; my @esorted = sort{ substr( $data[ $a ], 2, 1 ) cmp substr( $data[ $b ], 2, 1 ) } @eindex; @sortedData[ @eindex ] = @data[ @esorted ]; my @oindex = grep{ $data[ $_ ] !~ m[r] && $data[ $_ ] !~ m[^e] } 0 .. $#data; my @osorted = sort{ substr( $data[ $b ], -1 ) cmp substr( $data[ $a ], -1 ) } @oindex; @sortedData[ @oindex ] = @data[ @osorted ]; print for @sortedData; __END__ C:\test>1111596.pl whiskey bravo charlie zulu echo exit east foxtrot juliet kilo tango hotel golf mike yankee november oscar quebec alpha romeo sierra delta uniform victor india xray lima papa