OOP/Perl: Getter und Setter automatisieren

AUTOLOAD zum Aufrufen von Getter und Setter, Zugriff auf interne Attribute

Objektorientiert programmieren heißt, mit Veränderungen besser klarzukommen. Von daher empfiehlt es sich, den Zugriff auf interne Eigenschaften von Perl-Objektsn über sogenannte Getter und Setter zu regeln. Sofern die UNIVERSAL-Methode AUTOLOAD nicht anderweitig verbaut ist, lassen sich Getter und Setter damit automatisieren, derart, daß der Aufruf einer Methode die nicht im Scope definiert ist dazu führt, daß dieser Funktionsaufruf zu einem Getter bzw. Setter wird. So wird bspw. mit dem Aufruf $m->Ort('Ortsname') die Eigenschaft Ort auf den Wert Ortsname gesetzt. Ohne Argument gibt der Setter den Wert der Eigenschaft zurück ohne diesen zu setzen.

Beachte: Setze den Hash mit den Eigenschaften in eine extra dafür vorgesehene interne Eigenschaft! Damit wird das versehentliche Überschreiben interner Eigenschaften verhindert. Im Beispiel gibt es hierfür die spezielle Eigenschaft USER.

sub new{
    my $class = shift;

    # Vorbelegung bestimmter Attribute
    my %att = (
        Name  => '',
    @_);
    bless{
        USER => \%att
    }, $class;
}

# Magic Getter, Setter
sub AUTOLOAD{
    my $self = shift;
    my $val = shift;
    my $name = do{
        our $AUTOLOAD =~ /::(\w+)/;
        $1;
    };
    $self->{USER}{$name} = $val if $val;
    return exists $self->{USER}{$name} ? $self->{USER}{$name} : '';
}

sub DESTROY{}

my $m = main->new( Name => 'Bodo' );
$m->PLZ('99091');
$m->Ort('Erfurt');

puts Dumper $m;

Der Dumper gibt untenstehendes Aus:

$VAR1 = bless( {
 'USER' => {
     'Name' => 'Bodo',
     'Ort' => 'Erfurt',
     'PLZ' => '99091'
   }
}, 'main' );

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.