in reply to My Code Is Functional...But Not Tidy :(

The core testing part can be something like:
use IO::Socket::Inet; for ( ['Mail Servers', 'mail.test.com:110', 'mail.test.com:25'], ['Web Servers', 'test.com:80'], ['DNS Servers', 'test.com:53'], ) { my ($message, @ports) = @$_; my $good = 1; for (@ports) { $good = 0, last unless IO::Socket::INET->new($port); } print "$message: ", $good ? "Up" : "Down"; print "\n"; }
You'll have to add the HTML yourself. {grin}

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.