##
use Fcntl qw/:flock/;
{
my @file;
open my $fhB, '+<', 'B' or die $!;
flock $fhB, LOCK_EX or die $!;
while (<$fhB>) {
s/$Y/$Z/ if exists $line{$.};
push @file, $_;
}
truncate $fhB, 0 or die $!; # set up to overwrite file
print $fhB @file;
}
####
use Tie::File;
tie my @file, 'Tie::File', 'B' or die $!;
{
open my $fhA, '<', 'A' or die $!;
while (<$fhA>) {
$file[$. - 1] =~ s/$Y/$Z/ if /$X/;
}
}