in reply to Re: opened file being overwritten
in thread opened file being overwritten

#!/bin/Perl use warnings; if (@ARGV < 4) { print ("you need to provide 4 arguments\n\t4th argument is file to + parse"); exit; } $fh = pop(@ARGV); openfile(@ARGV); sub openfile { open FILE1,">$_[0]" || die "could not open $_[0]"; open FILE2,">$_[1]" || die "could not open $_[1]"; open FILE3,">$_[2]" || die "could not open $_[2]"; open FILE4,"<$fh" || die "could not open $fh"; while (<FILE4>) { print $_; } }

this makes no sense why the FILE4 file handle wont be printed i opened it for reading

Replies are listed 'Best First'.
Re^3: opened file being overwritten
by 2teez (Vicar) on Dec 13, 2012 at 21:31 UTC

    from open,

    If MODE is ">", the file is opened for output, with existing files first being truncated ("clobbered") and nonexisting files newly created. If MODE is ">>", the file is opened for appending, again being created if necessary.
    So, your files $_[0] to $_[3], is been "clobbered", by the ">" mode, while the last one should print out.

    If you tell me, I'll forget.
    If you show me, I'll remember.
    if you involve me, I'll understand.
    --- Author unknown to me
Re^3: opened file being overwritten
by Anonymous Monk on Dec 13, 2012 at 22:07 UTC

    Another large bug in your code is that due to operator precedence, your dies won't work.

    Basically, open FILE1,">$_[0]" || die "could not open $_[0]" is being interpreted as open FILE1,(">$_[0]" || die "could not open $_[0]")

    $ perl -MO=Deparse -e 'open INP, "<", "hello" || die $!' + open INP, '<', 'hello'; -e syntax OK $ perl -MO=Deparse -e 'open(INP, "<", "hello") || die $!' + die $! unless open INP, '<', 'hello'; -e syntax OK $ perl -MO=Deparse -e 'open INP, "<", "hello" or die "could not open: +$!"' die $! unless open INP, '<', 'hello'; -e syntax OK

    You either need to use the lower-precedence or operator or call the open() function with parentheses.