Thread Aufruf einer Methode, deren Name als Script dynamisch ermittelt wird
(3 answers)
Opened by Peter at 2012-01-27 18:12
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) |