Zurückgeben brauche ich das Handle aber doch eigentlich nicht?
Richtig, mir ging es nur darum, </archiv/2010/3/t195945/#m1312229> ③ zu vermeiden.
Wenn ich das richtig verstehe, geht auch nur ENTWEDER ODER, also prozedual oder objektorientert programmieren?
Im Prinzip ja, aber pauschal nein. Ein gewitzter Programmierer kann ein objektorientertes Interface zur Bequemlichkeit für den Benutzer mit einem prozeduralen umhüllen:
package Zonk;
sub new { ... return bless ... }
sub methode1 { my ($self) = @_; ... kompliziertes zeug }
sub bequem_und_schnell {
my (@param) = @_;
return __CLASS__
->new # Konstruktor mit Defaults
->methode1(@param);
}
=head1 SYNOPSIS
use Zonk;
my $z = Zonk->new(dies und das und noch viel mehr);
$z->methode1(blah); # flurbelt das Flummox mittels "blah"
# oder
Zonk::bequem_und_schnell(blah); # flurbelt das Flummox mittels "blah"
Oder umgekehrt ein prozedurales mit einem objektorienterten umhüllen; dies wird häufig so gemacht, wenn "stimmt_das_so" eine XS-Funktion ist:
package Narf;
sub stimmt_das_so {
return 1; # jawoll.
}
sub new {
my ($class) = @_;
return bless {} => $class;
}
sub check {
my ($self) = @_;
return stimmt_das_so;
}
=head1 SYNOPSIS
use Narf;
Narf::stimmt_das_so; # diesen Aufruf vermeiden, besser:
Narf->new->check;
OO-Experten können zwei Gründe nennen, warum das Umhüllen, so wie ich es auf die Schnelle dargelegt habe, schädlich ist.
Hast du vielleicht noch eine weitere Buchempfehlung für mich?
http://www.effectiveperlprogramming.com/ auf der rechten Seite. Diese neue zweite Ausgabe ist zwar noch nicht veröffentlicht, kommt aber sehr bald.