http://qs1969.pair.com?node_id=1040653


in reply to divide one file into multiple arrays

If you have a large number of sites on your bad list (or even lots of sites in your log), you would be better served with a hash. You could populate the hash with the contents of the original array and then use 'exists' for your comparison. So the above code could be written as:

use strict; use warnings; my @sites=qw/ www.yahoo.com www.google.com www.comcast.com /; my @bad_log; my @good_log; my %bad_hash = (); foreach my $bad_site (@sites) { $bad_hash{$bad_site} = 1; } while (my $line = <DATA>) { my $www = (split / /,$line)[5]; $www =~ s/---*//; if (exists $bad_hash{$www}) { push(@bad_log, $line); } else { push(@good_log, $line); } } print "\nBad lines are:\n"; foreach (@bad_log) { print; } print "\nGood lines are:\n"; foreach (@good_log) { print; } __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
which returns

Bad lines are: X456 TV-yes DB-no 123.12.23.45 dealio3 www.google.com-------- FX-yes d +53 Y-03 Good lines are: 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