use strict; use warnings; my %rank = ( tonsil => -2, # sorts very first foot => -1, # sorts before most hand => 1, # sorts after most chin => 1, # sorts after most pinky => 2, # sorts very last ); sub rank_sort { ($rank{$a}||0) <=> ($rank{$b}||0) || $a cmp $b } my @list = qw/leg hand chin eye pinky foot jaw tonsil finger/; print join(" ", sort rank_sort @list), $/;