Warum Klassen automatisch laden
Betrachte untenstehende Funktion bzw. Methode:
use strict;
use warnings;
use Data::Dumper;
*dumper = sub{
my $self = shift;
my $r = shift || $self;
$self->header('Content-Type' => 'text/plain; charset=utf-8');
$self->{CONTENT} = Dumper $r;
};
So funktioniert es: Eine in der Superklasse definierte Methode AUTOLOAD wird immer dann aufgerufen, wenn eine Methode aufgerufen wird, die im aktuellen Scope nicht definiert ist. Der Name der fehlenden Methode ist in $AUTOLOAD zu finden und in einem solchen Fall wird eine gleichnamige Datei, im Beispiel dumper.pm mit require eingebunden.
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;
}
Sofern die Methode selbst auch namentlich im Scope vorhanden ist, wird sie auch gleich ausgeführt. In der Anwendung wird eine derartige Methode ganz genauso aufgerufen, wie jede andere Methode die wie gewöhnlich im gleichen Namensraum definiert ist.
Datenschutzerklärung: Diese Seite dient rein privaten 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. sos@rolfrost.de und wenn Sie möchten daß mein Prepaid nicht verfällt dürfen Sie mich auch gerne anrufen 01625 26 40 76.