#! 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, @eindex, @oindex ); push @{ $data[ $_ ] =~ m[r] ? \@rindex : $data[ $_ ] =~ m[^e] ? \@eindex : \@oindex }, $_ for 0 .. $#data; my @rsorted = sort{ $data[ $a ] cmp $data[ $b ] } @rindex; my @esorted = sort{ substr( $data[ $a ], 2, 1 ) cmp substr( $data[ $b ], 2, 1 ) } @eindex; my @osorted = sort{ substr( $data[ $b ], -1 ) cmp substr( $data[ $a ], -1 ) } @oindex; @sortedData[ @rindex, @eindex, @oindex ] = @data[ @rsorted, @esorted, @osorted ]; print for @sortedData;