# data file is open to read on the FOO handle my @lines = ; # option A. my @lines = sort { substr( $a, 0, 1) cmp substr( $b, 0, 1) or substr( $b, 1) cmp substr( $a, 1) } @lines; # option B. my @ary; push @{$ary[ substr( $_, 0, 1)]}, substr( $_, 1) for @lines; @ary = map {[ reverse sort @$_ ]} @ary;