perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




10.02.2012 / 08:41

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragSubroutinen eines Moduls auslesen
Seitenanfang
Hallo Community!

Ich habe ein kleines Problem, hinter das ich bei Perl nicht genau komme.

Ich habe folgendes gemacht: in einem Unterordner kann man eigene Module ablegen, die etwas bestimmtes ausführen. Mein Skript liest dynamisch diese ganzen Module ein und möchte nun jeweils einen klar definierten Einstiegspunkt aufrufen, also eine bestimmte Funktion/Sub/Methode/Wasauchimmer, welcher meinetwegen ein "sub start_test" ist. So, kein Problem, solange alles ordnungsgemäß nach der von mir erstellten API abläuft. Wenn nun aber irgendwo ein Fehler auftaucht, weil irgendjemand darin ein Modul ablegt, was sich nicht genau an die Spezifikation hält (und mags nur ein Schreibfehler sein) geht alles schief. Das größte Problem, was ich erstmal filtern müsste, wäre die Tatsache, ob es in dem Modul tatsächlich ein sub "start_test" gibt.

Ob dann die offensichtlich existierende Methode alles korrekt zurückliefert ist ne andere Geschichte.

Mein Problem wäre also: wie kann ich von meinem "Hauptprogramm" aus erkennen, ob dieses sub tatsächlich in dem Modul existiert. Gibt es dafür eine Standardfunktion? Mir würde eine Liste der in einem Modul existierenden Subs am meisten gefallen. Sowas wie

modname->has_sub
oder
@subs = modname->subroutines
oder sowas in der Art.

Problem: ich brauch eine standardmäßig von Perl mitgelieferte Lösung, kein extra CPAN-Modul. Ich würde ja daumäßig mit Regexp nach "sub start_test" suchen, aber das ist ja nicht wirklich sicher... ;) Eine Lösung wie oben wäre mir wesentlich angenehmer.

Danke schonmal im Voraus,
BigMarser

Datum: 15.01.2007-11:49

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
Zu spät. Ich habe eine Lösung gefunden. :)

Falls es jemand interessiert:

Der Hash %packagename:: beinhaltet genau alle Methodennamen des Moduls (inklusive import). :)

Trotzdem danke, falls sich jemand bemüht hat.

BigM

Datum: 15.01.2007-12:25

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
je nachdem, was du genau wissen willst:
ich wuerde es mit can() machen.
if $object->can('sub') { ...};
if (Klasse->can('sub') { ... };

can() berücksichtigt vereerbung.

Datum: 15.01.2007-12:43

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
ein paar klammern vergessen. leider kann man ja in
diesem forum seine eigenen beiträge nicht editieren (vielleicht
werde ich ja irgendwann erhört, wenn ich es nur oft genug wiederhole)

Datum: 15.01.2007-12:44

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
"Der Hash %packagename:: beinhaltet genau alle Methodennamen des Moduls"

ich weiss nicht, wie genau dein code aussieht, aber der
hash beinhaltet noch mehr (evtl. package-variablen, typeglobs.)
deshalb solltest du dann noch den typ bestimmen.
wenn du dich einmal im wiki von perl-community umsiehst,
findest du
http://wiki.perl-community.de/bin/view/Wissensbasis/ObjektMethodenFinden
warum soll man sich nochmal die mühe machen, wenn
das problem schon gelöst wurde?

Datum: 15.01.2007-12:47

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
Ich habe kein Objekt, sondern nur ein Package. Wenn man das jedoch genauso behandeln kann, ok. So sehr perlschlau bin ich dann doch nicht :D
Müsste dann aber nicht in jedem Modülchen in dem Ordner diese methods-Methode erscheinen? Scheint mir für meine Zwecke unzweckmäßig.

Andererseits: die methods-Methode im Wikibeispiel arbeitet doch genau mit dem Hash, wenn ich den Code richtig interpretiere... *kratz*

BigMarser

Datum: 15.01.2007-13:11

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
"Müsste dann aber nicht in jedem Modülchen in dem Ordner diese methods-Methode erscheinen?"

nein.

Datum: 15.01.2007-16:57

Beitragre: Subroutinen eines Moduls auslesen
Seitenanfang
"Andererseits: die methods-Methode im Wikibeispiel arbeitet doch genau mit dem Hash, wenn ich den Code richtig interpretiere... *kratz*"

ja, aber richtig. ich weiss ja wie gesagt nicht, wie du es
implementiert hast und was du genau willst. can()
arbeitet halt mit vererbung, wenn du keine hast, ist es egal,
dann ist can() wirklich das einfachste.
ansonsten frag bei perl-community.de weiter, das forum ist komfortabeler, und da sitzen ein paar mehr experten als hier...

Datum: 15.01.2007-16:59

-






-
-