[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