#! perl -l my @foo =( "Service", "Organization", "FAQ"); my @priorities = qw(Organization FAQ Service); my $prio_top = join "|", map { "^$_" } @priorities; print join " ", sort by_priority @foo; print join " ", sort boo @foo; print join " ", sort corion @foo; sub by_priority { return -1 if $a =~ /^Organization/ ; return 1 if $b =~ /^Organization/ ; return -1 if $a =~ /^Service/ ; return 1 if $b =~ /^Service/ ; return -1 if $a =~ /^FAQ/ ; return 1 if $b =~ /^FAQ/ ; return 0 ; } sub boo { foreach ("Organization", "Service", "FAQ") { return 1 if $b=~/^\Q$_\E/; return -1 if $a=~/^\Q$_\E/; } return 0; } sub corion { # Return 0 on string identity return 0 if $a eq $b; return -1 if $a =~ /$prio_top/o; return 1 if $b =~ /$prio_top/o; # Alphabetical sort for the rest return $a cmp $b; }