Perl OOP: Getter automatisieren ohne Gettermethoden zu definieren

Eine spezielle Methode AUTOLOAD regelt die Rückgabe der gewünschten Eigenschaft

Betrachte untenstehenden Code:

package Foo;
use strict;
use warnings;

sub new{
    my $class = shift;
    return bless{ Foo => 123 }, $class;
}

sub AUTOLOAD{
    my $self = shift;
    my $name =
        our $AUTOLOAD =~ /(\w+)$/ ?
        $1 : undef;

    $self->{$name};
}
sub DESTROY{}
1;#########################################################################

package main;
use strict;
use warnings;

my $foo = Foo->new;
print $foo->Foo(); # 123

Erläuterungen: In der main-Class wird wie üblich eine Instanz der Klasse Foo erstellt. Dann wird mit dieser Instanz ganz einfach die Methode Foo() aufgerufen. Nun gibt es in der Foo-Klasse keine solche Methode, von daher sucht der Perl-Interpreter eine Methode mit dem Namen AUTOLOAD() in der aktuellen Package.

Die Methode AUTOLOAD() gibt es und innnerhalb dieser Methode wird die Variable $AUTOLOAD befragt, welche Methode aufgerufen wurde, lt. Beispiel befindet sich der String Foo::Foo in $AUTOLOAD. Es genügt, den Teilstring am Ende nach dem Muster \w zu extrahieren, genau das ist die gewünschte Eigenschaft, die, soweit vorhanden, direkt aus der Methode AUTOLOAD() heraus zurückgegeben wird.


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