#!/usr/bin/perl -w use strict; use Data::Dumper; my @sites = qw(Hillsboro Rialto Santa_Ana Memphis Richmond); my @sortme = sort {$a cmp $b} @sites; unshift @sortme, 'Foo', 'Bar'; print Dumper \@sortme; { my %order; foreach (0..$#sites) { $order{$sites[$_]} = $_; # build index } $order{DEFAULT} = $#sites + 1; my @sorted = sort { if (exists $order{$a} && exists $order{$b}) { $order{$a} <=> $order{$b} } elsif ( exists $order{$a}) { $order{$a} <=> $order{DEFAULT} } elsif ( exists $order{$b} ) { $order{DEFAULT} <=> $order{$b} } else { $a cmp $b } } @sortme; print Dumper \@sorted }