[Melbourne-pm] An intermittent problem with open for append

Guy Morton guy at alchemy.com.au
Tue May 27 23:21:01 PDT 2008


aren't you supposed to use "or" instead of "||" after an open, due to  
operator precedence?

http://perl.plover.com/FAQs/Precedence.html#Precedence_Traps_and_Surprises


On 28/05/2008, at 4:14 PM, Paul Fenwick wrote:

> G'day Tim,
>
> Tim Hogard wrote:
>
>> open OUT,">>/home/foo/que/$ip" || push @error, "Cant save details";
>> print OUT "$ip:t:date=",scalar localtime,"\n";
>> ... then it prints to OUT all the rest of ${ENV} and CGI vars.
>
> Well, if there's a problem opening the file, then I expect you have
> something in @error that may tell you what's wrong, but I'll assume  
> that if
> it was that simple youd' know about it.  So...
>
>> Can anyone explain why perl 5.005 works yet 5.8.8 doesn't?
>> I was under the impresson that the ">>" means tell the OS to
>> open in append mode, any data written should go in the file
>> and not just end up lost.
>
> It absolutely does mean it should append.  My guess is that you may be
> seeing a buffering issue; if something later causes your program to  
> exit
> unexpectedly, it may not have finished writing to the file.
>
> I'd throw a:
>
> 	use IO::Handle;
>
> at the top of your code, and a:
>
> 	OUT->flush or die "Can't flush OUT: $!";
>
> when you've finished writing a record to your file.  ->flush will  
> force the
> data to be written, and will return false (and should set $!) if  
> there's any
> problems.
>
>> open a file and append their PID and hunt for errors or maybe even  
>> trace
>> that the append flag is in fact on (is there an easy way to get  
>> that info?)
>> or maybe its a singal problem where its getting an odd signal.
>
> If you're using strace, you should be able to see the file open with
> O_APPEND as one of the options.  If you have an existing filehandle,  
> you can
> test for O_APPEND using fcntl:
>
> 	use Fcntl;
>
> 	my $flags = fcntl(MYFILE, F_GETFL, 0);
> 	print( ($flags & O_APPEND) ? "append" : "not append");
>
> Cheerio,
>
> 	Paul
>
> -- 
> Paul Fenwick <pjf at perltraining.com.au> | http://perltraining.com.au/
> Director of Training                   | Ph:  +61 3 9354 6001
> Perl Training Australia                | Fax: +61 3 9354 2681
> _______________________________________________
> Melbourne-pm mailing list
> Melbourne-pm at pm.org
> http://mail.pm.org/mailman/listinfo/melbourne-pm



More information about the Melbourne-pm mailing list