file-1: file-2 1000 - foo 2000 2000 - bar 3000 3000 - fubar .... ... 990000 1000000 - heck #### use autodie qw(open close); open my $fip, '<', 'file-1'; open my $fop, '<', 'file-2'; LINE1: while (my $line1 = <$fip>) { my @token = split(/-/, $line1, 2); while (my $line2 = <$fop>) { chomp $line2; if ($token[0] == $line2) { print $line1; next LINE1; } } } close $fip; close $fop; #### use autodie qw(open close); open my $fip, '<', 'file-1'; open my $fop, '<', 'file-2'; my %record_id; while (my $line = <$fop>) { chomp $line; $record_id{$line} = 1; } close $fop; while (my $line = <$fip>) { my @token = split(/-/, $line, 2); if ( exist $record_id{$token[0]} ) { print $line; } } close $fip;