Methode $method der SUPER-Klasse aufrufen
Philipp Hasenfratz
- perl
Halihallo
Ich habe eine AUTOLOAD-Funktion, welche nicht definierte Funktionsaufrufe abfängt, verarbeitet und gewisse Aktionen ausführt. Einige Methodennamen können jedoch von dieser AUTOLOAD-Funktion nicht verarbeitet werden, und genau diese sollen von der SUPER-Klasse ausgeführt werden. Leider habe ich es bisher nur mit eval-lösen können, was auch funktioniert. Aber ich will keine eval in meiner AUTOLOAD-Funktion. Kann mir jemand auf die Sprünge helfen, wie ich den gewünschten Effekt ohne eval erzielen kann? - Ich bin mir ziemlich sicher, dass dies irgendwie gehen muss.
------
my $meth_invoc = '';
my ($tmp, @tmp) = ('', '');
if (wantarray()) {
$meth_invoc = "@tmp = $self->SUPER::$method( @params );";
} else {
$meth_invoc = "$tmp = $self->SUPER::$method( @params );";
}
eval $meth_invoc; # giving up and passing to XML::DOM-Interface
die $@ if ($@);
return $tmp unless (wantarray());
return @tmp if (wantarray());
------
Viele Grüsse
Philipp
Hallo Philipp,
no strict 'refs';
if (wantarray()) {
$meth_invoc = "@tmp = $self->SUPER::$method( @params );";
@tmp = &{"SUPER::$method"}(@params);
} else {
$meth_invoc = "$tmp = $self->SUPER::$method( @params );";
$tmp = &{"SUPER::$method")(@params);
}
eval $meth_invoc; # giving up and passing to XML::DOM-Interface
die $@ if ($@);
return $tmp unless (wantarray());
return @tmp if (wantarray());
return wantarray ? @tmp : $tmp;
So muesste es klappen.
Gruesse,
CK
Halihallo Christian
no strict 'refs';
@tmp = &{"SUPER::$method"}(@params);
$tmp = &{"SUPER::$method")(@params);
return wantarray ? @tmp : $tmp;So muesste es klappen.
Besten Dank, das tut es in der Tat! (btw. das @params musste ich machen, da ich innerhalb von "..." arbeitete, konnte ich jedoch selber ändern ;))
Viele Grüsse
Philipp