in reply to Replace and substitur in same file

Hello Nansh,

Well I am not sure if I understand correctly your question is a bit not cleat to me.

But if I understand correctly you want to a open a file e.g. data.txt which has some lines inside and then replace these lines with 'Red Car', that's it nothing else?

If this is the case I would approach it somehow like this (pseudo code):

#!usr/bin/perl use strict; use warnings; my $infile = '/path/path/data.txt'; open( my $in, "<", $infile ) # use filehandles not bareword or die "Couldn't open $infile: $!"; chomp(my @lines = <$in>); # store data in an array in case you need th +em close $in or warn "close failed: $!"; # close file # empty file # open file in write mode # write your new data on empty file # close file # done :D

So in further details why to use file handles instead of bareword? read here (open). I quote:

An older style is to use a bareword as the filehandle, as open(FH, "<", "input.txt") or die "Can't open < input.txt: $!"; Then you can use FH as the filehandle, in close FH and <FH> and so on. + Note that it's a global variable, so this form is not recommended in + new code.

The point to note here is source Don't Open Files in the old way:

It is global to all the script you write so if anyone uses the same na +me (IN or OUT in our example) those will clash with yours. It is also harder to pass these variables to functions, than to do the + same with regular scalar variables.

Then the next step is how to empty the file? Read more about here truncate. But remember once you empty your file there is not way back this is why I copied the content of your file into the array.

Last step open file in writing mode, read more about it here open it contains all the information on how to do it.

This is it pretty much :D

Hope this helps, BR.

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^2: Replace and substitur in same file
by Nansh (Acolyte) on Jun 21, 2017 at 14:28 UTC

    Thanks it helped me.