# seemingly arbitrary (but "meaningful") ordering sequence of port numbers: my @port_seq = qw/554 110 80 8080 22 25 21 443 53/; # hash to deliver ordering value for each port value: my %port_order = map { $port_seq[$_] => $_ } 0 .. $#port_seq; # unordered array of data (port numbers): my @ports = qw(544 554 80 80 80 80 80 53 22 22 22 22 8080 554 443 80 80 25 110 143 143 110 21 22 111 110); # print @ports in "sorted" order: print "$_\n" for ( sort {$port_order{$a} <=> $port_order{$b}} @ports );