给定子程序引用,有没有办法找出声明子程序的文件和行号?警告和 friend 似乎做对了,但我在外部需要这个。这是我的测试程序:
#!/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";
}
输出:
102
102
Got to here at 'bin/some_file.pl' line 24.
行信息不是我所期望的,所以我假设我做错了什么(B::GV 有一个相应的 FILE 方法,但在我让 LINE 工作之前,它对我来说没有多大用处)。
还有其他方法可以获取此信息吗?我在上面的代码中做错了吗?
更新:事实证明,如果我不使用 line 指令,'FILE' 和 'LINE' 方法似乎可以正常工作。看起来这可能是 B::GV 模块中的错误。
最佳答案
你可以试试看 caller
.这是调试器用来构建堆栈跟踪的内容,所以也许这就是您想要的。
我不认为__LINE__
, __FILE__
和 __PACKAGE__
在这里为您提供帮助,因为它们仅提供当前执行点的位置,这意味着给定代码引用或子代码,您将获得相同的结果。
关于perl - 如何获取创建 Perl 子例程引用的文件和行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/503769/