sub server_sort {
# bi-valued key = 0 if {tag} is not 53 and 1 if {tag} is 53
(($my_server_hash{$a}{tag} == 53)
<=>
($my_server_hash{$b}{tag} == 53))
||
$a cmp $b
||
$my_server_hash{$a}{tag} <=> $my_server_hash{$b}{tag}
}
my @server_names = sort &server_sort keys %my_server_hash;
# now the server names are sorted with the 53 tags grouped
# separately from the rest.
####
sub make_key {
my $sn = shift;
my $tag = $my_server_hash{$sn}{tag};
# NOTE: presumes largest server name may be contained
# in 20 chars and that {tag} values won't exceed 99,999
return sprintf "%1d%20s%5d", ($tag == 53), $sn, $tag};
}
sub decode_key {
my $key = shift;
return substr $key, 1, 20;
}
my @server_names = map { decode_key($_) }
sort { $a cmp $b }
map { make_key($_) } keys %my_server_hash;
##
##
sub make_key {
my $sn = shift;
my $tag = $my_server_hash{$sn}{tag};
my $member = $my_server_hash{$sn}{ADMINS};
my $key = ($tag == 53) ? 2 :
(($member =~ s/$tag/FOUND:$tag/i) && $tag != 1) ? 1 :
0;
return sprintf "%1d%20s%5d", $key, $sn, $tag};
}