Ewww, icky formatting. Go see
perlstyle.
Where is the use strict?
This is how I would do a program like this:
#!/usr/bin/perl -w
use strict;
use Net::DNS;
use HTML::Template;
use Getopt::Long;
use constant TLDS => qw(
com edu gov int mil net org ac ad ae af ag ai
al am an ao aq ar as at au aw az ba bb bd be bf
bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc
cd cf cg ch ci ck cl cm cn co cr cs cu cv cx cy
cz de dj dk dm do dz ec ee eg eh er es et fi fj
fk fm fo fr ga gb gd ge gf gg gh gi gl gm gn gp
gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il
im in io iq ir is it je jm jo jp ke kg kh ki km
kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv
ly ma mc md mg mh mk ml mm mn mo mp mq mr ms mt
mu mv mw mx my mz na nc ne nf ng ni nl no np nr
nu nz om pa pe pf pg ph pk pl pm pn pr ps pt pw
py qa re ro ru rw sa sb sc sd se sg sh si sj sk
sl sm sn so sr st su sv sy sz tc td tf tg th tj
tk tm tn to tp tr tt tv tw tz ua ug uk um us uy
uz va vc ve vg vi vn vu wf ws ye yt yu za zm zr
zw
);
# where our data goes for the template
my @data ;
# get options
GetOptions(
\my %config,
'nameserver=s@',
'tld=s@',
);
# must be added after or list includes defaults
$config{tld} ||= [ TLDS ];
my $res = Net::DNS::Resolver->new();
$res->nameservers(@{ $config{nameserver} })
if defined $config{nameserver};
# do the lookups
foreach my $root (@{ $config{tld} }) {
my $query;
unless($query = $res->search($root, 'NS')) {
warn 'query failed (', $root, ') ', $res->errorstring;
next;
}
# add the data to the list
my %root_data = (
name => $root,
ns => [],
);
foreach my $rr ($query->answer) {
next unless $rr->type eq 'NS';
push @{ $root_data{ns} }, { address => $rr->nsdname };
}
push @data, \%root_data;
}
# output the data, with the template in the DATA section
my $template = HTML::Template->new(filehandle => *DATA);
$template->param(roots => \@data);
print $template->output;
__DATA__
<html>
<body>
<!--TMPL_LOOP NAME="roots"-->
<h2><!--TMPL_VAR NAME='name'--></h2>
<ul>
<!--TMPL_LOOP NAME='ns'--><li> <!--TMPL_VAR NAME='address'--><!--/T
+MPL_LOOP-->
</ul>
<!--/TMPL_LOOP-->
</body>
</html>
Of course, I'd probably write some pod and use the ever great
Pod::Usage :)
Also, another command line argument could be added to specify an alternative template.
And it would be fairly trivial to turn this into a CGI script, other than the fact it takes a long time to do all the lookups.