Учитывая ссылку подпрограммы, есть ли способ узнать номер файла и строки, где была объявлена подпрограмма? предупреждают и друзья, кажется, это правильно, но мне нужно это извне. Здесь моя тестовая программа:
#!/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" работают нормально, если я не использую директивы line. Похоже, это может быть ошибка в модуле B:: GV.