Philipp Hasenfratz: Methode $method der SUPER-Klasse aufrufen

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

  1. 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

    1. 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