Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

The line number to be used by warnings is set by an nextstate op that's placed at the start of each statement. These are the lines numbers used by B::Xref.

A while loop statement starts with an enterloop op that should only be executed when the loop is entered, not every pass of the loop. As such, the bottom of the loop continues directly to the loop condition rather than the start of the statement. This bypasses the opcode that sets the line number.

Therefore, according to the way the ops are stored, the condition is considered part of the while loop statement, as well as part of the last statement of the loop.

It might be possible for B::Xref to be smarter, but it's really a problem with Perl itself.

use strict; use warnings; my $c = 0; while ( warn("x"), ++$c<2 ) { my $dummy; }
x at line 5. x at line 6.

It seems to me this could be solved by placing a nextstate at the start of the while loop condition. I don't know why this isn't done.

In reply to Re: B::Xref buggy? by ikegami
in thread B::Xref buggy? by LanX

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, 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, 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.
  • Log In?

    What's my password?
    Create A New User
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others meditating upon the Monastery: (4)
    As of 2020-08-11 21:15 GMT
    Find Nodes?
      Voting Booth?
      Which rocket would you take to Mars?

      Results (63 votes). Check out past polls.