Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: B::Xref buggy?

by ikegami (Patriarch)
on Nov 16, 2018 at 20:57 UTC ( [id://1225922]=note: print w/replies, xml ) Need Help??


in reply to B::Xref buggy?

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 a.pl line 5. x at a.pl 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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1225922]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (2)
As of 2024-04-19 22:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found