如何获取创建Perl子例程引用的文件和行号?

Ovi*_*vid 10 perl

给定子例程引用,有没有办法找出声明子例程的文件和行号?警告和朋友似乎做对了,但我需要外部.这是我的测试程序:

#!/usr/bin/perl -l

use strict;
use warnings;
use B;

# line 99 'bin/some_code.pl'
{
    no strict 'refs';
    print B::svref_2object(\*{'Foo::some_sub'})->LINE;
    print B::svref_2object(\&Foo::some_sub)->GV->LINE;
}
Foo::some_sub();

package Foo;
# line 23 'bin/some_file.pl'
sub some_sub {
    warn "Got to here";
}
Run Code Online (Sandbox Code Playgroud)

那输出:

102
102
Got to here at 'bin/some_file.pl' line 24.
Run Code Online (Sandbox Code Playgroud)

线路信息不是我所期望的,所以我假设我做错了(B :: GV有一个相应的FILE方法,但是直到我让LINE工作,它对我来说没用多少).

是否有其他方法来获取此信息,我在上面的代码中做错了什么?

更新:事实证明,如果我没有使用行指令,'FILE'和'LINE'方法似乎工作正常.看起来它可能是B :: GV模块中的错误.

dsm*_*dsm 4

你可以尝试看看caller。这就是调试器用来构建堆栈跟踪的内容,所以也许这就是您想要的。

我不认为__LINE__和在这里为您提供帮助__FILE__,因为它们只提供当前__PACKAGE__执行点的位置,这意味着给定代码引用或子代码,您将得到相同的结果。