http://qs1969.pair.com?node_id=55209


in reply to RE: File Input and Output
in thread File Input and Output

of course it will create a new file. since you have opened it in write mode..it will open a new file and write data into it. if the file had already existed it would have removed the whole existing data and just put in data you just wrote. to prevent this open in >> mode

Replies are listed 'Best First'.
Re^3: File Input and Output
by apotheon (Deacon) on Oct 16, 2004 at 07:49 UTC
    It occurs to me that this fact might not be intuitively obvious to someone that isn't already used to that behavior, as for instance from regular use of bash. It's intuitively obvious to me, but I'm a penguinista. Those who write Perl but use Windows, for instance, wouldn't be used to that kind of behavior. Remember that in the Windows GUI environment files never get named until they're saved after editing. Habitual Windows users probably never realize that what's going on is that the file is actually only being "opened" for the first time when that "okay" button in the save dialog is clicked.

    So: For those of us used to that sort of behavior (like 'nix users), it's "Of course it will create a new file." For those who are not (like Windows users), it's "Oh. That's news to me."

    The fact that one must use >> instead of > to edit an already extant file without wiping out its contents is an important fact, though, and it's a good thing you brought it up. It should really be included in the text of the tutorial itself.

    - apotheon

    CopyWrite Chad Perrin
      Sorry it took me three years to make this note, but people who've used DOS or the Windows command line and worked with redirection have used the same > and >> that bash uses. It's just the GUI-only folks who wouldn't know this.

        True . . . and I could have been more clear about that. Most MS Windows users (these days) are basically GUI-only types, though.

        print substr("Just another Perl hacker", 0, -2);
        - apotheon
        CopyWrite Chad Perrin