2011-01-15 9 views
2
definiert

Mögliche Duplizieren:
In Perl, how can I check from which module a given function was imported?Perl: Feststellen, wo eine Funktion

Hallo Jungs! Ich benutze meine Wochenendzeit, um unsere Web-App durchzukämmen, um sie besser zu verstehen. Es verwendet zahlreiche Module, deren Funktionen in es hineingezogen werden und meine Frage ist das .. Wie kann ich das Modul bestimmen, aus dem eine Funktion stammt?
Ich frage deshalb, weil ich Zeilen drucken STDERR bestreut hier verwenden und dort die Möglichkeit, Daten um bewegt zu verstehen .. hier ist ein Beispiel ....

($file_data,$count) = lookup_files($customer,$site,'','0',$d); 

Was (es Dinge stark entmystifiziert hat) I Ich bin mir nicht sicher, woher lookup_files() stammt. Was ich sehen möchte, ist das ....

($file_data,$count) = lookup_files($customer,$site,'','0',$d); 
print STDERR "lookup_files originates here " . <CODE TO SHOW ME WHERE lookup_files IS DEFINED>; 

Jeder Rat auf, wo man anfängt, würde sehr geschätzt werden. Die Webanwendung verwendet Tonnen von Gebrauchsmodulen und anstatt selektiv nur das zu importieren, was benötigt wird, scheint jede Verwendung alle Funktionen einzubringen.
Ich weiß, dass meine Terminologie in Bezug auf "Methode", "Eltern" usw. falsch sein kann Perl. Wenn jemand mich darauf korrigieren möchte, wäre das auch zu schätzen. Ich bin im besten Fall ein Anfänger mit diesem Zeug. Janie

+0

Gerade kommt eine Anmerkung zur Terminologie, es scheint, dass das, was Sie eine "Methode" nennen, wird normalerweise eine "Funktion" genannt (eine Methode ist eine spezielle Vielfalt von Funktionen in Perl), und es wäre klarer zu sagen "Bestimmen, wo eine Funktion ist Defined "(" parent "bezieht sich normalerweise auf den Namen der Funktion, die eine bestimmte Funktion aufgerufen hat, nicht wo sie war definiert). Gute Frage. –

+0

@j_random_hacker: Ich bin dankbar für all Ihre Ratschläge. Ich habe viele der oben genannten Themen überarbeitet. :-) JW –

+0

Kein Problem :) Als allgemeine Regel wird entweder die Funktion in der gleichen Quelldatei definiert oder mit einem 'use' Befehl in der Nähe der Spitze importiert. Im letzteren Fall, wenn Sie Glück haben, wird es explizit in der 'use'-Zeile wie' fooModule qw (foo bar lookup_files); ', aber das ist nur eine übliche Konvention. –

Antwort

5

Werfen Sie einen Blick auf das Core-Modul Devel :: Peek

http://perldoc.perl.org/Devel/Peek.html#A-reference-to-a-subroutine

Die Ausgabe, die Funktionen des Moduls wird Ihnen sagen, wo ein Unterprogramm von

+0

Danke dafür! Ich bin so glücklich, dass jeder in SO so hilfreich ist, wenn ich eine Frage stelle und Sie mehr als einmal Hilfe geleistet haben und dafür bin ich dankbar. JW –

2

Ein ziemlich einfacher Weg ist Carp::Always laden. Wenn es sich um eine Webanwendung handelt, müssen Sie sie in den Code einfügen. Für eine Befehlszeile können Sie nur perl -MCarp::Always ...