QuoteDas 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