use warnings; use strict; my $f1 = 'file1.txt'; my $f2 = 'file2.txt'; my @original; my @gottem; open( my $file1, '<', $f1 ); while ( my $line1 = (<$file1>) ) { next if ( $line1 =~ /^#/ ); chomp($line1); open( my $file2, '<', $f2 ); while ( my $line2 = (<$file2>) ) { next if ( $line2 =~ /^#/ ); chomp($line2); my ( $leftside, $rightside ) = split( /\s/, $line2, 2 ); if ( $line1 =~ $leftside ) { push( @original, $rightside ); } } } # print "$_\n" for(@original); for (@original) { open( my $file_2, '<', $f2 ); while ( my $line_2 = (<$file_2>) ) { my ( $first, $last ) = split( /\s/, $line_2, 2 ); if ( $last =~ $_ ) { push( @gottem, $line_2 ); } } } print $_ for (@gottem);