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;

Datenschutzerklärung: Diese Seite dient rein persönlichen Zwecken. 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