给定子程序引用,是否有办法找出声明子程序的文件和行号?警告和朋友似乎得到这个权利,但我需要这个外部。这里是我的测试程序:如何获取创建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";
}
输出:
102
102
Got to here at 'bin/some_file.pl' line 24.
行信息是不是我很期待,所以我认为我做错了什么(B :: GV都有相应的FILE方法,但直到我得到LINE的工作,这对我来说没有多大用处)。
有没有其他的方式来获取这些信息,我在上面的代码中做错了什么?
更新:事实证明,如果我不使用行指令,'FILE'和'LINE'方法似乎工作正常。看起来它可能是B :: GV模块中的一个错误。
也许更详细的解释你期待什么,为什么会有所帮助。不经意间读者很容易忽视示例中的“特殊”评论,而不理解它们对行计数器的影响。 – converter42 2009-02-02 17:35:41