Data::Dumper wird nur geladen wenn er gebraucht wird

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.


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.