use strict; use feature qw(say); use Socket; use File::Tail; my $file = File::Tail->new("/some/log/file"); my $seen = {}; my $line; while (defined($line = $file->read)) { if ($line =~ /^DATE (IP) (WHATEVER)/) { my $remote_ip = $1; my $whatever = $2; my $remote_host; if ($seen->{$remote_ip}) { $remote_host = $seen->{$remote_ip}; else { $remote_host = getaddrinfo(inet_pton($remote_ip),AF_INET) || 'none'; $seen->{$remote_ip} = $remote_host; } say join "\t", qw/$remote_ip $remote_host $whatever/; } }