Thread Hin- und Her-"blessen" (7 answers)
Opened by Max_Perlbeginner at 2018-06-10 07:23

rosti
 2018-06-10 17:25
#188518 #188518
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
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)

View full thread Hin- und Her-"blessen"