Using seek and tell to update a file will be most useful when writing files with fixed-length records. There is a problem with the method you're trying to accomplish, in that if what you're writing is anything more or less than the exact size of what you're replacing, you'll either not completely overwrite the word you're trying to substitute, or you'll overwrite it and more. There is no "insert into" function, when dealing directly with flat files. Files grow only at the bottom end.

The most common idiom for dealing with this problem is to read one file line by line, and for each line read, process that line, and write it back out to a new file. After you're done, you rename the new file over the old one, and presto, you're done.

Another common approach is to use Tie::File. This module allows you to treat your file like an ordinary array, altering the contents of individual elements, inserting elements, deleting elements, splicing, and so on. Tie::File provides a layer of abstraction from the file, to hide the ugly details of working with files.

Good luck!


Dave


In reply to Re: help me on seek and tell function by davido
in thread help me on seek and tell function by dee00zee

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.