Thread Aufbewahrung von Funktionen und Subroutinen (6 answers)
Opened by peterb at 2021-10-15 08:29

rosti
 2023-05-15 16:53
#194882 #194882
User since
2011-03-19
3492 Artikel
BenutzerIn
[Homepage]
user image
Quote
Das Problem dabei ist, das ich sie immer erst suchen muss, in welchem Script ich diese verbaut habe.


Die Lösung lautet AUTOLOAD. Wenn man eine Funktion/Methode aufruft die nicht im aktuellen Namespace definiert ist, versucht der Interpreter eine Funktion mit dem Namen AUTOLOAD aufzurufen. Und in dieser Funktion, sofern definiert, hat man dann eine Variable $AUTOLOAD in welcher der Name der Funktion steht die aufgerufen wurde. Nehmen wir mal an, eine Funktion foo() wurde aufgerufen. Der Trick besteht jetzt darin, eine gleichnamige Datei mit require zu laden, also require "factory/foo.pm"; zum Beispiel. In dieser Datei, die sich zeckmäßigerweise in einen Verzeichnis factory (Name egal) befindet, ist sub foo{} definiert.

Zweckmäßigerweise wird diese Factory-Methode per OOP abgewickelt, so muß man die sub AUTOLOAD{} nur einmal in der Baseclass definieren und die wird dann vererbt. So sucht sich der Perlinterpreter bzw. die Instanz ihre Methoden selber. Und eine zackige Fehlermeldung verkündet Name und Hausnummer einer Datei die es noch nicht gibt. Damit wird redundanter Code weitgehend vermieden ohne daß man die Basisklasse ändern muß. Auch ein mock (Atrappe) kann diese Methoden aufrufen. Und man kann im Factory-Verzeichnis mehrere hundert Funktionen haben die nur bei Bedarf geladen werden. Das alles kann man übrigens auch mit PHP machen.

MFG

View full thread Aufbewahrung von Funktionen und Subroutinen