in reply to Regex and writing lines in file

#!/usr/bin/perl use strict; use warnings; my $file; my $match = "that"; my $extra = "Hello, I snook in here\nme too!"; { local $/; $file = <DATA>; $file =~ s/$match\n([^\n]*)\n([^\n]*)/$match\n$1\n$2\n$extra/; } print $file; __DATA__ this that leave me leave me move me and me
Output
this that leave me leave me Hello, I snook in here me too! move me and me

Cheers,
R.

Pereant, qui ante nos nostra dixerunt!

Replies are listed 'Best First'.
Re^2: Regex and writing lines in file
by amma (Novice) on May 01, 2013 at 09:59 UTC

    I opened the file in string context and was able to find the pattern successfully. But I could not substitute the matched pattern with required pattern

    $extra = "This is i will place after match\n.an this too"; open (my $fh, '+<', $file); $data = <$fh>; $data = s/(.*entry)\n([^\n]*)\n/$1\n$extra/

    The $1 is found successfully. But could not do the substitution in the file.

      You have now substituted within the $data variable. Next you need to write the contents of $data back to the file. Try adding something like this after the substitution

      # untested seek $fh, 0, 0; # rewind to the start of the file print $fh $data; # Write the entire file close $fh;

      Of course this may not be very efficient if you have a large file to alter, but then inserting into the middle of a very big file never is. If you are frequently updating random records in a file you may need to start thinking about using a database.

      Cheers,
      R.

      Pereant, qui ante nos nostra dixerunt!

        Partially worked for me. Thank you!