Gibt es eine Subroutinenreferenz, gibt es eine Möglichkeit, die Datei- und Zeilennummer herauszufinden, wo die Subroutine deklariert wurde? Warnen und Freunde scheint das richtig zu machen, aber ich brauche das extern. Hier ist mein Testprogramm:Wie kann ich die Datei- und Zeilennummer erhalten, wo eine Perl-Subroutinenreferenz erstellt wurde?
#!/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";
}
Das gibt:
102
102
Got to here at 'bin/some_file.pl' line 24.
Die Linie Informationen ist nicht das, was ich erwarte, so dass ich nehme an, ich mache etwas falsch (B :: GV hat eine entsprechende FILE-Methode, aber bis ich LINE arbeite, ist es mir nicht viel nützen).
Gibt es eine andere Möglichkeit, diese Informationen zu erhalten, und mache ich etwas falsches im obigen Code?
Update: Wie es sich herausstellt, scheinen die "FILE" und "LINE" -Methoden OK zu funktionieren, wenn ich keine Direktiven verwende. Sieht so aus, als könnte es ein Fehler im B :: GV-Modul sein.
Vielleicht würde eine detailliertere Erklärung dessen, was Sie erwarten und warum, helfen. Für den gelegentlichen Leser ist es einfach, die "speziellen" Kommentare im Beispiel zu beschönigen, ohne deren Auswirkung auf den Zeilenzähler zu verstehen. – converter42