Thread Hin- und Her-"blessen"
(7 answers)
Opened by Max_Perlbeginner at 2018-06-10 07:23
bless ist überflüssig. Denn die Erbfolge steht ja vorher schon fest. Was Du jedoch bezüglich Deines Problems machen kannst:
Lege sämtliche Methoden für den Autoloader in ein eigenens Verzeichnis. Jede Methode bekommt einen gleichnamigen Dateinamen, z.b. metode.pm und in dieser Datei gibt es eine sub methode{} also auch mit dem gleichen Namen. Und: Verzichte in der Methodendatei auf die Deklaration einer Package. Code (perl): (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 30 31 32 33 34 35 sub AUTOLOAD{ my $self = shift; my $fname = do{ our $AUTOLOAD =~ /(\w+)$/; $1; }; require "factory/$fname.pm"; return $self->can($fname) ? do{ my $code = $self->can($fname); $self->$code(@_); } : undef; } # Beispiel einer Methode use strict; use warnings; sub localtime{ my $self = shift; my $time = shift || time; my %hunt = (); my @fields = qw(sec min hour mday mon year wday yday isdst); @hunt{@fields} = localtime($time); $hunt{year} += 1900; $hunt{mon} += 1; return \%hunt; }; 1; # UNIT TEST use Data::Dumper; $, = "\n"; my $m = bless{}; print Dumper $m->localtime(); Fazit: Sämtliche dieser in Verzeichnis factory abgelegten Methoden können mit Instanzen beliebiger Klassen aufgerufen werden. Das ermöglicht auch die Tests beim Entwickeln. Last edited: 2018-06-10 17:28:20 +0200 (CEST) |