The ">" argument to open means "truncate existing file and open for output" or "open a new file for output", depending on if the file exists already or not. Note, that's a lot different from appending.

Append is ">>" (two >'s next to each other).

In other words, instead of this:

open FH, ">filename" or die "Bleah!\n$!";

File level appending is opened like this:

open FH, ">>filename" or die "Bleah!\n$!";

Have a look at perlopentut for details.

However, your code looks like it's trying to slurp in the file first, and then write it back out from scratch, while adding the new stuff at the end. Ok, that's one strategy, but it's not exactly the same thing as doing a file append.

As for your code, a better solution (since you also seem to be doing some processing on the current file, if it exists) would be this:

Open the input file. Open a temporary output file. Read the input file line by line. Process one line of input. Write it out to the output file. When done, append your additional information to the output file. Close the input file. Close the output file. Then rename your temp file so that it replaces your input file. Do your writing in standard ">" mode, because you're writing a new temp file, not appending to an existing file.


Dave


In reply to Re: appending to a file by davido
in thread appending to a file by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.