use strict; use warnings; open my $FILEC, '>', 'fileC'; open my $FILEB, '<', 'fileB'; open my $FILEA, '<', 'fileA'; while (my $line = <$FILEB>) { do {local $_; print $FILEC $_ while (<$FILEA>)} if $line =~ m/INSERT BEFORE HERE/; print $FILEC $line; }