Golf, anyone?
If you’re OK reading the whole input file into memory, the part function from List::MoreUtils can be used to populate both arrays at once. (This also incorportes Eily’s use of map to populate %bad_hash.)
#! perl
use strict;
use warnings;
use List::MoreUtils qw( part );
my %bad_hash = map { $_ => 1 } qw(
www.yahoo.com
www.google.com
www.comcast.com
);
my ($good_log, $bad_log) = part { exists $bad_hash{ (split)[5] =~ s{--
+-*}{}r } } <DATA>;
print "\nBad lines are:\n";
print for @$bad_log;
print "\nGood lines are:\n";
print for @$good_log;
__DATA__
X456 TV-yes DB-no 123.12.23.45 dealio3 www.google.com-------- FX-yes d
+53 Y-03
X123 TV-yes DB-yes 34.154.43.21 dealio1 www.ask.com-------- FX-no d01
+Y-03
X412 TV-no DB-no 192.365.25.23 rayovac2 www.microsoft.com--- FX-yes d1
+3 Y-07
Hope that’s useful,