in reply to Nested foreach problem

1) I'm sure others have told you but with your file read inside the loop that checks for each name, you end up reading each file once for every name checked. That's an inefficiency. The file loop should be the outer loop.

One way of doing this is:

my @name_array = qw(fred joe john frank ); for my $file(@file) { open(FILE, "<", $file) or die("can't open file $file.\n"); while (my $line = <FILE>) { my $match = grep { $line =~ /$_/i } @name_array; print OUT $line if ( $match ); } }
2) Since the "printing" loop doesn't check to see if the line has been printed before, you can print similar text over and over. If you want to avoid that, use a hash to ensure uniqueness of the lines being printed.

An example:

my %unique; if ( $have_a_line_to_print ) { $unique{$have_a_line_to_print} = 1; } # # much later # for( sort keys %unique ) { print; }