#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
my ($ref_file, $data_file) = qw{pm_1146340_file1.txt pm_1146340_file2.txt};
my (%ref_left, %ref_right, @output);
open my $ref_fh, '<', $ref_file;
while (<$ref_fh>) {
chomp;
undef $ref_left{$_};
}
close $ref_fh;
open my $data_fh, '<', $data_file;
while (<$data_fh>) {
my ($left, $right) = split ' ', $_, 2;
next unless exists $ref_left{$left} and not defined $ref_left{$left};
++$ref_left{$left};
++$ref_right{$right};
}
seek $data_fh, 0, 0;
while (<$data_fh>) {
my ($left, $right) = split ' ', $_, 2;
next unless $ref_right{$right};
push @output, $_;
}
close $data_fh;
print for @output;
####
123 string 1
111 string 1
222 string 1
333 string 1
456 string 2
444 string 2
555 string 2
666 string 2
789 string 3
777 string 3
888 string 3
999 string 3
####
123 string 1
111 string 1
####
111 string 1
123 string 1
####
123 string 4
111 string 4
####
while (<$ref_fh>) {
chomp;
++$ref_left{$_};
}
...
while (<$data_fh>) {
my ($left, $right) = split ' ', $_, 2;
next unless $ref_left{$left} or $ref_right{$right};
++$ref_right{$right};
}