in reply to Creating Flags

my($n1,$n2,$letter,$ordinal,$name,$code) = (my @record = split(/[\s,]+/,$_)); push (@DB, [@record]);

You are needlessly copying the array to a new array:

my ( $n1, $n2, $letter, $ordinal, $name, $code ) = my @record = split /[\s,]+/; push @DB, \@record;

(@{$hash{"$name$code"}})[-1]

That is usually written as $hash{"$name$code"}[-1].   You are needlessly copying the array to a list.


my ($a_ordinal,$a_name) = (@$a)[3,4]; my ($b_ordinal,$b_name) = (@$b)[3,4];

Again, you are needlessly copying the array to a list.   That is better written as:

my ( $a_ordinal, $a_name ) = @{ $a }[ 3, 4 ]; my ( $b_ordinal, $b_name ) = @{ $b }[ 3, 4 ];