#! /usr/bin/perl use strict; use warnings; use List::Util qw( first ); my $fileA = "A.txt"; my $fileB = "B.txt"; my $outfile = "C.txt"; my $criteria_siue = 20; # be sure you have enough memory for this! my %reference; open my $fh, '<', $fileB or die "open($fileB,ro) failed: $!\n"; # expensive in memory usage (as it uses temporary lists in memory) # %reference = map { substr( $_, 0, $criteria_size ) => $_ } <$fh>; while ( my $line = <$fh> ) { $refernce{ substr( $line, 0, $criteria_size ) } = $line; } close $fh; open my $fhout, '>', $outfile or die "open($outfile,w) failed: $!\n"; open my $fhin, '<', $fileA or die "open($fileA,ro) failed: $!\n"; while ( my $lineA = <$fhin> ) { my $critA = substr( $lineA, 0, $criteria_size); print $fhout ( exists $reference{$critA} ? $reference{$critA} : $lineA ); } close $fhin; close $fhout or die "close($outfile) failed: $!\n";