http://qs321.pair.com?node_id=859745

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

I have a computer that has a shared folder on it. inside the shared folder is a file called test.txt. the shared folder is read only to other computers. my question is, if a program in that computer is appending stuffs on test.txt and a different program on a different computer opens that file using the code below
open(FH,"/path/to/shared/test.txt);
will it affect the appending of files of the other program? or do i have to use the code below instead?
open(FH,"</path/to/shared/test.txt);
so as to declare that it is on readonly mode.
Mabuhay Civil Engineers! :D

Replies are listed 'Best First'.
Re: perl open readonly question
by Anonymous Monk on Sep 11, 2010 at 13:06 UTC
    The file will always be affected, but its better to use 3 arg open
    use autodie; open my($fh), '<', '/path';
    autodie does error checking for you
Re: perl open readonly question
by Corion (Patriarch) on Sep 11, 2010 at 13:14 UTC

    See open:

    ... If MODE is '<' or nothing, the file is opened for input. ...
Re: perl open readonly question
by doug (Pilgrim) on Sep 12, 2010 at 14:57 UTC

    For your specific question, there is no difference between the two. If you don't put any of the input or output type characters in the filename, then it defaults to read only. perldoc -f open should explain that in detail.

    As for one open() affecting another one, perl's open() is always subject to the the host OS's file system semantics. If the host's open causes problems, then perl's open will too.

    For years a standard trick in the *ix world is to have one process write to a file and another use "tail -f" to watch that file as it gets updated. This has worked well for decades, and the biggest issue being that when they are on two different machines, the commit from the client to the file server is usually at 8k boundaries (I think that is a NFSism), so it doesn't flow smoothly. But it does work.

    Since you are using the term folder instead of directory I assume that you are using some MS operating system. I avoid them as much as possible, so I don't know how this will work there. Good luck with that.

    - doug