in reply to A looping and format question...

Well, you're code's pretty rough, but i'll try and pinpoint the immediate problem:
write STDOUT if defined($registrant and $admin and $tech and $billing +and $names[2] and $expires);
If the above test evaluates to true, you should also exit the OUTER loop, thus;
if defined($registrant and $admin and $tech and $billing and $names[2] + and $expires){ write STDOUT; last OUTER; }
Otherwise the loop will keep on recurring and print your results several times.

I would also suggest that a much better way of doing this would be to take the test out of the loop entirely.
Also, you may want to take a look at the Net::Whois module.