my @file; my $changed; { open(my $fh, '<', $fn) or die("Unable to open file \"$fn\": $!\n"); while (<$fh>) { if (...[ need to delete this line ]...) { $changed = 1; } else { push @file, $_; } if (...[ need to insert a line after this line ]...) { push @file, ...; $changed = 1; } } } if ($changed) { open(my $fh, '>', $fn) or die("Unable to open file \"$fn\": $!\n"); print $fh @file; }