use Tie::File; tie my @lines, 'Tie::File', 'filename' or die $!; for (my $i = 1; $i <= $#lines; $i++) { if ($lines[$i] =~ /^\+/) { $lines[$i - 1] =~ s/\n/substr $lines[$i], 1/e; splice @lines, $i, 1; redo; } }