# this is quick my $no_field2 = "field1: valueA\nsome\nlines\nhere\nfield3: valueC\n"; $no_field2 .= "........................................\n" x 1000; $no_field2 =~ s/(field1:.*?$)\n(?!^field2:)(.*$)\n(^field3:) /$1\nfield2: valueB\n$3 /msx; # this is slow my $has_field2 = "field1: valueA\nfield2: valueB\nfield3: valueC\n"; $has_field2 .= "........................................\n" x 1000; $has_field2 =~ s/(field1:.*?$)\n(?!^field2:)(.*$)\n(^field3:) /$1\nfield2: valueB\n$3 /msx;