amy063000 has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I am a beginner to perl, really needs some help from here. I have a file as following: id name age 1 amy taylor 20 2 paul li 59 3 Bob hand 30 now i need to add each person's email to the same file. I need to get person's id, go to database to find that person's email and then add the email to that person in the same line. What is the good way to do that? Does anybody have example. Your help is greatly appreciated. thanks, Amy

Replies are listed 'Best First'.
Re: read and write to the same file
by SuicideJunkie (Vicar) on Mar 06, 2015 at 21:04 UTC

    The thing to understand about files is that they are only one-dimensional streams of bytes. A line ending is just one (or two, depending on your OS) bytes, and the next byte after that is more text.

    In order to insert some text at the end of a line, you need to overwrite the line ending and some bytes after it. If you try to do that in the original file, you will be stomping on the bytes you haven't read yet, and things will go horribly wrong.

    Three common ways to avoid that problem include:

    • Write to a new file, then copy it over the original when done (as in above post)
    • Read the whole file in to memory, modify in memory, then write the whole thing out from scratch. (big files vs small memory cause obvious problems here)
    • Fixed width fields; make every line take up N bytes. (You know the next few bytes aren't used and can be overwritten safely, but your lines can't get any longer than N, ever.)

      SuicideJunkie++ because to give such a quality answer to a so poor spelled question is not for everyone.

      PS amy063000 show some (even if little) Perl effort asking: you'll be better rewarded.

      L*
      There are no rules, there are no thumbs..
      Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Re: read and write to the same file
by Happy-the-monk (Canon) on Mar 06, 2015 at 20:44 UTC