Учитывая ссылку на подпрограмму, есть ли способ узнать файл и номер строки, в которой была объявлена подпрограмма? предупреждаю, и друзья, кажется, понимают это правильно, но мне это нужно внешне. Вот моя тестовая программа:
#!/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, мне это не очень полезно) 1007 *
Есть ли другой способ получить эту информацию, и я что-то не так делаю в приведенном выше коде?
Обновление : Оказывается, методы 'FILE' и 'LINE' работают нормально, если я не использую директивы строки. Похоже, что это может быть ошибка в модуле B :: GV.