in reply to Sorting by season

Your custom sorter should use $a and $b as the inputs. If you wish for the arguments to be passed via @_, you need to use the ($$) prototype. I believe this is slower.

In fact, your whole approach is complex and slow. Fix:

my %term_order; @term_order{qw( SM AU WI SP )} = 1..4; my @try = ( [qw( WI AU SM SP )], [qw( SP AU SM WI )], [qw( AU WI SP SM )] ); for my $try (@try) { my @sort = sort { $term_order{$a} <=> $term_order{$b} } @$try; print "@sort\n"; }
SM AU WI SP SM AU WI SP SM AU WI SP