Thread Aufruf einer Methode, deren Name als Script dynamisch ermittelt wird (3 answers)
Opened by Peter at 2012-01-27 18:12

Gast Peter
 2012-01-27 18:12
#155729 #155729
Guten Tag,

ich möchte gerne ein DBIx::Class-Objekt mit einer eigenen Klasse "dekorieren" (s.a. http://de.wikipedia.org/wiki/Dekorierer). Dazu habe ich mir überlegt, dass ich der Dekorierer-Klasse eine Referenz auf das zu dekorierende Objekt übergebe und speichere. Bei einem Methoden-Aufruf ermittle ich per AUTOLOADER, welche Methode aufgerufen wird. Diese soll aufgerufen werden - und dann bei bestimmten Aktionen noch weitere Aktionen durchführen.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use strict;

use MyModels::Main::Result::User;
use DecoratorHistory;


my $prj = new MyModels::Main::Result::User( ... );
   $prj = new DecoratorHistory($prj);

my $p = $prj->search( {project_id => 12 } , {} )->single();   
 

Hier noch mein Dekorierer-Modul:
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
36
37
38
39
package DecoratorHistory;

use strict;
use vars '$AUTOLOAD';


sub new {
    my ($class, @args) = @_;
    my $self = bless {}, ref($class) || $class;
    $self->_init(@args);
    return $self;
}

sub _init {
    my ($self, @args) = @_;

    $self->{_object} = shift @args;
}

sub AUTOLOAD {
    my ($self, @args) = @_;

    my $function = $AUTOLOAD;
    $function =~ s/^(.*::)//;
    return if ($function eq 'DESTROY');

    # - -
    my $o = "$self->{_object}->$function";
    my $r = $o->( @args );    ######   <- klappt nicht...   

    # - add extra behaviour -
    if ($function eq 'update') {
        # eigene weitere Aktionen...
    } # if

    return $r;
}

1;

... nur klappt aber leider nicht der "durchgeleitete" Aufruf der Methode der zu dekorierenden Klasse. "Klar..." werden viell. einige von Euch sagen - dann könnt Ihr mir vielleicht einen Tip geben?? ;-)

Ich habe nun schon viel ausprobiert und im Netz gesucht - aber komme nicht weiter.

Viele Grüße, Peter
Last edited: 2012-01-27 18:35:24 +0100 (CET)

View full thread Aufruf einer Methode, deren Name als Script dynamisch ermittelt wird