Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Empty File Contnts before writing

by gautamparimoo (Beadle)
on Feb 19, 2013 at 07:10 UTC ( #1019467=perlquestion: print w/replies, xml ) Need Help??
gautamparimoo has asked for the wisdom of the Perl Monks concerning the following question:

Hi. I want empty the file contents before writing into it again.The following is my code:

open(FILE1 , ">" ,"testing1.txt"); print FILE1 "stat"; #Do the required actions print FILE1 "stat-updated"; close(FILE1);

The output file contents will be:

stat stat-updated

But I want the output file to contain just :stat-updated.How to do it?? Do I need to close the filehandle or call truncate or something else??

Replies are listed 'Best First'.
Re: Empty File Contnts before writing
by tobyink (Abbot) on Feb 19, 2013 at 07:46 UTC

    The function you seek is... seek

    use strict; use warnings; open my $fh, ">", "testing1.txt"; print $fh "stat"; seek $fh, 0, 0; print $fh "stat-updated"; close $fh; system cat => "testing1.txt";
    package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

      Yes, seek works in this case because the final output is longer than the initial output. But a word of caution is in order. Consider:

      #! perl use strict; use warnings; my $filename = 'test.txt'; open(my $fh, '>', $filename) or die "Cannot open file '$filename' for +writing: $!"; print $fh "The quick brown fox jumped over the unfortunate dog."; seek $fh, 0, 0; print $fh "The final output."; close($fh) or die "Cannot close file '$filename': $!";

      This results in file “test.txt” containing:

      The final output.ox jumped over the unfortunate dog.

      as seeking to the beginning of the file does not erase its existing contents.

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        So I will have to open and close the file agin in order to completely truncate watever is written in previous write attempts?

        Yeah, gotta watch out for those output-oxen. ;-)
Re: Empty File Contents before writing
by Athanasius (Chancellor) on Feb 19, 2013 at 07:44 UTC

    Yes, closing the filehandle and re-opening for writing with ">" will truncate the file. See open and perlopentut.

    Note that you should test open’s return value. Either

    use autodie;

    or write

    open(my $file1, ">", "testing1.txt") or die "Cannot open file 'testing +1.txt' for writing: $!";

    Also note that a lexical variable (as shown) is preferable to a bareword for the filehandle.

    Hope that helps,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1019467]
Approved by Athanasius
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2017-09-23 22:03 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (273 votes). Check out past polls.