http://www.perlmonks.org?node_id=988260


in reply to Re: How can I get the current OP address (akin to PC)?
in thread How can I get the current OP address (akin to PC)?

Thanks for the suggestion. I tried and it didn't work for me.

Here is something that sort of works but doesn't really.

In file /tmp/Devel/COP.pm:

package DB; sub DB { ($pkg, $filename, $lineno) = caller; $COP = 0; local(*DB::dbline) = "::_<$DB::filename"; if (defined $DB::dbline[$lineno]) { $COP = 0 + $DB::dbline[$lineno] ; } }; 1;
And to test it, put in file /tmp/code-test.pl:
#!/usr/bin/perl use B::Concise; sub testit () { my $walker = B::Concise::compile('-basic', '-src', 'testit'); B::Concise::set_style_standard('debug'); B::Concise::walk_output(\my $buf); $walker->(); # walks and renders into $buf; print $buf, "\n"; printf "COP is 0%x\n", $DB::COP; } testit();
Now run as perl -I/tmp d:COP /tmp/code-test.pl

The problem is that the COP address is always the first statement for the line. And what I really want is the one we are currently at which might not be the first COP of the line. Sigh.