Perl-Factory: Funktionen automatisch nachladen und ausführen

Beim Aufruf von Perlfunktionen gelten in einem Namensraum bestimmte Gesetzmäßigkeiten

Stets ist beim Aufruf einer Funktion der Namespace qualifiziert, Beispiele:

# es gilt der aktuelle Scope
$rv = drucken();

# es gilt der Namespace
# der aufrufenden Instanz
$rv = $pr->drucken(1,3,5);

# explizite Namespace Deklaration
# Aufruf der Funktion mit dem Namen
# der Package
Carp::confess('Bitte nicht stören!');

Der Perl-Interpreter sucht also die Funktionsdefinition im aktuellen Namespace (Scope) bzw. im Scope der aufrufenden Instanz. Wenn die Definition jedoch nicht vorhanden ist und nicht gefunden wurde, sucht der Perl-Interpreter nach einer Funktion mit dem Namen AUTOLOAD im entsprechenden Scope. Erst wenn es diese Funktion nicht gibt, bricht der Perl-Interpreter die weitere Ausführung des Scripts mit einem Fatal Error ab. Ist diese Funktion jedoch definiert, beinhaltet eine Variable $AUTOLOAD den voll qualifizierten Namen derjenigen Methode, welche aufgerufen wurde.

Untenstehend ein Beispiel dafür, wie Funktionen/Methoden aus einem fest vorgegebenen Verzeichnis nachgeladen werden können. Das hierfür konfigurierte Verzeichnis mit dem Namen factory befindet sich unterhalb einer im @INC Array deklarierten Pfadangabe.

sub AUTOLOAD{
    my $self = shift;
    my $fname = do{
        our $AUTOLOAD =~ /(\w+)$/;
        $1;
    };
    require "factory/$fname.pm";
    return $self->can($fname) ? do{
        my $code = $self->can($fname);
        $self->$code(@_);
    } : undef;
}

In der jeweiligen .pm-Datei ist die Methode wie gewöhnlich definiert. Beachte, dass am Ende der Datei ein wahrer Wert notiert ist, damit der Compiler mit einem wahren Wert zurückkommt. Beispiel:

# Datei dd.pm
# dump+die
use Data::Dumper;
sub dd{
    my $self = shift;
    my $r    = shift || $self;
    die Dumper $r;
};
1;

Die rein persönlichen Zwecken dienende Seite verwendet funktionsbedingt einen Session-Cookie. Datenschutzerklärung: Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. @: nmq​rstx-18­@yahoo.de