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>