I don't really like last, redo, and next much. They have many of the same problems that lead people to complain so much about goto but they also are worse than goto in that it can take quite a bit of parsing (by the human reading the code) to figure out where they are transfering control to. You have to keep parsing past enclosing braces deciding whether each is the kind of "block" that these affect or not.

So if you are going to use them, please use them as little as possible and try not to hide them in the code. I've experimented with out-denting these types of constructs but only very rarely find that more than marginally effective.

So I have two big gripes with the above code. First, putting a last at the very top (or bottom) of the block is just obfuscation. Change that to: while(  ++$tries <= 10  ) { Second, your redo is quite well hidden! I'd much rather have the conditional nature of the execution of the $success= 1; line more obvious.

How about this?

do { if( 0 < $tries++ ) { warn "Can't flock file: $!\n"; } elsif( 10 < $tries ) { die "Gave up trying to lock file.\n"; } warn "Locking file (attempt $tries)...\n"; } while( ! flock(FILE,2) ); # Success!

        - tye (but my friends call me "Tye")

In reply to (tye)Re: How to use Labels by tye
in thread How to use Labels by Anonymous Monk

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.