in reply to Foreach loop explanation

Using a regex does not seem appropriate here because the lines may contain regex metacharacters. The sample code below assumes you want exact matches. You may need to tailor it for things like white space, case sensitivity, and so on.

use strict; use warnings; @ARGV == 2 or die "usage: $0 file1 file2\n"; my $file1 = shift; my $file2 = shift; open my $in1, '<', $file1 or die "unable to open '$file1': $!"; open my $in2, '<', $file2 or die "unable to open '$file2': $!"; chomp( my @nomi = <$in1> ); chomp( my @indirizzi = <$in2> ); close $in1; close $in2; # Remove any blank or empty lines (optional, depends on your data file +s). @nomi = grep { !/^\s*$/ } @nomi; @indirizzi = grep { !/^\s*$/ } @indirizzi; # Create a hash of lines in @nomi. my %in_nomi; foreach my $item (@nomi) { $in_nomi{$item}++ } # Check if each line in @indirizzi is in nomi. # Note: does not check for duplicate lines in @indirizzi. foreach my $line (@indirizzi) { print "$line\n" if $in_nomi{$line}; }

See perlfaq4, especially the frequently asked questions: