my @rawentries = ( "1topEndbit", "2ndbit", "endBit3", "4thbit", "5thbit", "6OtherEndbit", "7Bitsecondfromend", "8Bitoneoffend", "9Anyoldbit", ); sub ToTop { my $t1 = ($a =~ m/Endbit/i)? 0:1; my $t2 = ( $b =~ m/Endbit/i )? 0:1; $t1 <=> $t2; } sub ToEnd { my $t1 = ($a =~ m/Endbit/i)? 1:0; my $t2 = ( $b =~ m/Endbit/i )? 1:0; $t1 <=> $t2; } my @toendlist = sort ToEnd @rawentries; my @totoplist = sort ToTop @rawentries; print (join "\n", @toendlist); print "\n\n".join ("\n", @totoplist)."\n";