Thread Perl und OOP: Ein paar Anfänger-Fragen (8 answers)
Opened by Gast at 2007-01-31 22:41

PerlProfi
 2007-01-31 23:11
#73899 #73899
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Zu deiner ersten Frage: Normalerweise fangen Package-Namen mit einem Großbuchstaben an, also nicht builder sondern Builder.

Zu 2.:
Man legt eigentlich nicht jeweils eine Variable für ein Attribut an, sondern lässt Objektattribute auch im Objekt.

Desshalb würde ich dein 2. Beispiel einfach ein wenig umändern:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
### Package ###

package Builder;

use strict;

sub new {
my ($class, %args) = @_;

return bless(\%args, $class);
}

sub print {
my ($self) = @_;

print $self->{author}, "\n";
}

1;

Normalerweise definiert man dann noch accessor Methoden für Attribute.
Eine allgemeine Accessormethode kannst du mit AUTOLOAD definieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub AUTOLOAD
{
# Objekt und neuen Wert aus der Parameterliste holen
my($self, $nv) = @_;
# Methodennamen holen
my $attr = $AUTOLOAD;

# package entfernen
$attr =~ s/.*:://;

# alten Wert holen
my $ov = $self->{$attr};
# Wert ändern, falls gewünscht
$self->{$attr} = $nv if defined $nv;

# alten Wert zurückgeben
return $ov;
}

Jetzt kann man um author zu ändern, einfach $obj->author('neuer autor'); schreiben.

Zu bless(): Weil $self schon eine Hashreferenz ist.

View full thread Perl und OOP: Ein paar Anfänger-Fragen