#!/usr/bin/perl use strict; use warnings; my $first = "single_records.txt"; my $second = "multiple_records.txt"; open (my $fh, '<', $second) || die "Failed to open $second : $!" ## always check for success on fh my %second_records = (); while (<$fh>){ my $line = $_; my ($id,) = split /\s+/, $line; ## capture id push @{ $second_records{$id} }, $line; } ## tidy up close $fh || die "Failed to close $second : $!"; ## open single record file and compare open ($fh, '<', $first) || die "Failed to open $first : $!"; while (<$fh>){ my $line = chomp( $_ ); my ($id,) = split /\s+/, $line; ## capture id if ( exists$second_records{$id} ){ print (join '', "$line matches records:\n", @{ $second_records{$id} }); } } close $fh || die "Failed to close $first : $!";