If an operation dies, all the open handles are closed as part of the normal shutdown. Also, with modern perl, you can use a lexical scalar (my $foo;) and the $foo handle will be closed automatically when it goes out of scope.

It is good policy to check all interaction with the os for errors and die, retry, or otherwise handle the error.

Your nest of conditionals is unnecessarily complicated, therefore. I'd rewrite it something like this:

{ sysopen my $trigger, $config->{xmlpath}.'trigfile.tf', O_WRONLY | O_EXCL | O_CREAT or die $!; flock $trigger, LOCK_EX | LOCK_NB or die $!; print $trigger $/ or die $!; close $trigger or die $!; }
At any stage that dies, the file is closed. if you want to continue in spite of errors, you can replace the die clause with warn $! and last; which will have the same effect on the handle, give the same error message, but will continue at the end of the block. I didn't try to duplicate your html output for errors, but it can be inserted in the error message and CGI::Carp can send the errors to the browser.

After Compline,
Zaxo


In reply to Re: Flock, die and statement order by Zaxo
in thread Flock, die and statement order by Ionizor

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.