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 files). @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}; }