Tassilo Von Parseval wrote:
> On Mon, Jun 09, 2003 at 02:46:48AM -0500 christopher j bottaro wrote:
>
> > what is the easiest way to replace text in a file?  say i have file blah.txt
> > and i want to replace some regular expression found in that file with
> > something.  also, i want to do this from within the perl program, not by
> > invoking perl with the -e option.
>
> You can use the same underlying technique from within a Perl script. You
> have to set two special variables accordingly and Perl can even do an
> inplace-edit:
>
>     local $^I = 1;              # enable inplace editing
>     local @ARGV = "blah.txt";   # make it accessible with <>
>     while (<>) {
>         s/blabla/BLABLA/;
>         print;
>     }

The value of $^I is the string to be appended to the backup copy of
the original file. The above will edit 'blah.txt' and rename the original
file to 'blah.txt1'.

> This however might not work on Windows due to some limitations concerning
> open files.

As far as I know this is fine on all systems, including Windows. It will fail
only if $^I is the empty string, which implies editing without a backup and
is not supported by Windows. To disable editing in place $^I must be set to
'undef'. A 'false' value will not do.

> So if the above is no option for you, you have to do it manually:
>
>     open IN,  "blah.txt"     or die $!;
>     open OUT, "blah.txt.tmp" or die $!;

  open OUT, "> blah.txt.tmp" or die $!;

>     while (<IN>) {
>         s/blabla/BLABLA/;
>         print OUT;
>     }
>
>     close IN;
>     close OUT;
>
>     rename "blah.txt.tmp", "blah.txt" or die "Renaming: $!";

Cheers,

Rob




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to