#! 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 } } ; 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 d53 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 d13 Y-07