in reply to Re: novice falls
in thread novice falls

Hopefully if you're parsing a log file you won't get this sort of garbage input, but it is better to be safe than sorry. Instead of writing the regexp to end all regexps, which many have made a noble effort of doing, maybe using this admittedly slack one with some post-processing is the best bet.
use Socket; # ... if ($line =~ /\b(\d{1,3}(?:\d{1,3}){3}\b/) { if (my $in_addr = inet_aton($1)) { if ($name = gethostbyname($in_addr, AF_INET)) { # ... } } }
inet_aton will reject any bad input, such as 999.999.999.999, meaning that gethostbyname will not even try to resolve these.

As a side-note, gethostbyname can take a very, very long time to return input if the name-servers for that address block are down. If you are trying to bulk-resolve, you might want to use a tool which does this more efficiently, such as dnsfilter from the DJB DNS package. A Perl solution is also available from CPAN.