package MyOrder; use strict; my %order = (); sub SortMyWay { my ($a,$b) = @_; if ( exists $order{$a} and exists $order{$b} ) { return $order{$a} <=> $order{$b} } elsif ( exists $order{$a} ) { return 1 } elsif ( exists $order{$b} ) { return -1 } else { return $a cmp $b } } package main; use strict; my @foo = qw( j a p h , ); my @bar = sort { MyOrder::SortMyWay($a,$b) } @foo; print "@bar";