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.


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. s​os­@rolf­rost.de.