As soon as I saw a label (LOOP:) in your code, I knew we were in for something confusing. Sure enough, a couple of lines later, there's a next, but it's not just a plain next; it has to use the label, because the are intervening control-flow structures. The while loop logic in itself is not your problem. It's the logic of next that gets things all confused, and then to make it even more confusing you slap an until on the next. That's at least three levels of control-flow structures involved, which IMO is too many. (The amount of confusion surrounding next increases geometrically with the amount of control-flow structure involved.) I'm sure someone here is clever enough to iron out exactly how to make next skip the desired iterations, but I'm even more sure that there are less confusing ways to achieve what you want.

Others have suggested only printing if you aren't inside a comment. That'll work fine, and is a good way to do it. In the interest of of TMTOWTDI, another solution would be to do something like this when you detect the beginning of a comment:

{ local $/ = '*/'; <CMDTXTF>; } <CMDTXTF>;

The first diamond operator slurps everything up to the close of the comment in one fell swoop. The localized $/ tells it how far to go. The braces keep the change in $/ from leaking out to spoil the rest of your code. The second diamond operator should clean up the rest of the line after the */, even if it's just a newline character, so that you're ready for the next line when the loop resumes.

One caveat: if any of the lines might have $/ in other fields besides the fifth one, which don't apply to the fifth field (e.g., perhaps the fourth field of several consecutive records is commented out in this fashion, with no implications for the fifth), then this solution isn't smart enough to deal with that correctly.


In reply to Re: while loop logic by jonadab
in thread while loop logic 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.