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

Ronnie
 2007-01-31 22:57
#73898 #73898
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Mit der zweiten variante kannst du dich böse in die Nesseln setzen, wie folgendes Beispiel zeigt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl

use strict;

package builder;

my $author;

sub new {
my ($class, %args) = @_;
$author = $args{author};
return bless(\%args, $class);
}

sub print {
my ($self) = @_;
print $author."\n";
}

package main;

my $builder;
$builder = builder->new(author => "Author");
$builder->print();

my $b2;
$b2 = builder->new(author => "Joe");
$b2->print();
$builder->print();

Da verwendest du eine Klassenvariable, statt einer Instanzvariable. Das geht nur solange gut bis du ein zweites Objekt erzeugst!

EDIT: bei der Schreibweise der Klassennamen verwende ich zumeist CamelCase - aber das ist Geschmackssache. Ich finde das man Klassen so gut vom Rest unterscheiden kann. Laut perlstyle ist lowercase für pragmas vorgesehen.

EDIT2: http://perldoc.perl.org/perlstyle.html - der Wikitext scheint zu einer älteren Fassung von perlstyle zu gehören.

EDIT3:
Prinzipiell empfehle ich die Verwendung von CPAN:Moose, wie in folgendem Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;

package builder;
use Moose;

has 'author' => ( is => 'rw' );

package main;

my $builder;
$builder = builder->new(author => "Joe");
print $builder->author . "\n";

Man spart sich viel Arbeit mit Konstruktor und Accessoren.\n\n

<!--EDIT|Ronnie|1170277683-->

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