Please bottom post....

> when I open the file like :
> open(RELFILE,">$file")  || die ("error opening file \"$file\"");
> 
> ......
> and print the change in sam efiel I get a 0 size file .
> 
> @array = <RELFILE>;   
> while (@array) {      
>       chomp($_);
>       $_=~ s/(#define SW_VERSION_MAJOR)(.*)/$1\t$major/;
>       $_=~ s/(#define SW_VERSION_MINOR)(.*)/$1\t$minor/;
>       $_=~ s/(#define SW_VERSION_PATCH)(.*)/$1\t$patch/;
>       $_=~ s/(#define SW_VERSION_BUILD)(.*)/$1\t$build/;
>       $_=~ s/(#define SW_VERSION_STR)(.*)/$1\t$string/;
>       $_=~ s/(#define SW_RELEASE_MONTH)(.*)/$1\t$month/;
>       $_=~ s/(#define SW_RELEASE_DAY)(.*)/$1\t\t$day/;
>       $_=~ s/(#define SW_RELEASE_YEAR)(.*)/$1\t\t$year/;      
>      print RELFILE "$_ \n";
>       }
> close (RELFILE);
> do you what is the problem?
> 

Perl does not read/write (normally) a file at the same time. You should
read the contents of the file, then open it for writing then step
through the contents.  Optionally there is also the Tie::File module
which appears very handy for this sort of thing.

http://danconia.org

> Roger Layani
> -----Original Message-----
> From: Wiggins d Anconia [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, May 05, 2004 5:35 PM
> To: Aviram, Shy; [EMAIL PROTECTED] - Sharing Perl Questions; Perl
> (E-mail); Layani, Roger
> Subject: Re: Problem changing the content of a file
> 
> 
> Please don't cross post...
> 
> > 
> > The code:
> > sub mkrelease_dot_h{
> > $devlabel = shift (@_);
> > $file = shift (@_);
> 
> Why are these not lexically scoped (my'd)? 
> 
> > my ($major,$minor,$patch,$build) = ExtractRelease($devlabel);
> > my ($month,$day,$year) = GetCurrentDate();
> > chomp($year);
> >  
> > open(RELFILE,"$file") || die ("error opening file \"$file\"");
> 
> You are opening the above file for reading. To change a file you have to
> open it for writing.
> 
> perldoc -f open
> perldoc perlopentut
> 
> > $string = "\"$major.$minor.$patch.$build\"";
> > while (<RELFILE>) { 
> > 
> > chomp($_);
> > $_=~ s/(#define SW_VERSION_MAJOR)(.*)/$1\t$major/;
> > $_=~ s/(#define SW_VERSION_MINOR)(.*)/$1\t$minor/;
> > $_=~ s/(#define SW_VERSION_PATCH)(.*)/$1\t$patch/;
> > $_=~ s/(#define SW_VERSION_BUILD)(.*)/$1\t$build/;
> > $_=~ s/(#define SW_VERSION_STR)(.*)/$1\t$string/;
> > $_=~ s/(#define SW_RELEASE_MONTH)(.*)/$1\t$month/;
> > $_=~ s/(#define SW_RELEASE_DAY)(.*)/$1\t\t$day/;
> > $_=~ s/(#define SW_RELEASE_YEAR)(.*)/$1\t\t$year/; 
> 
> This just changes the local $_ variable, it doesn't do anything to the
> file once that line is read in.  You will have to 'print' the line back
> into the file, don't forget to tack your new line back on since you have
> chomped it.
> 
> > }
> > 
> > close (RELFILE);
> > return $file;
> > }
> >  
> > The question:
> >  
> > Why this code does not change the content of file $file ?
> >  
> 
> HTH,
> 
> http://danconia.org
> 
> 



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to