Beat: Pluginstelle für Module

Beitrag lesen

Ich suche nach einem Plugin mechanismus

s#(?<!\\)\[module: ($Nested1Level) (?<!\\)\]# user_module($1) #egx;  

und

sub user_module{  
  my $m = shift or return '';  
  my $mod = '';  
  my ($error, $content) = (1,'');  
  $m =~ /\[name:([a-z]+)\]/ and $mod = $1;  
  $mod or return '<b class="warning">Modulname nicht spezifiziert.</b>';  
  my $f = $Path{cgidir} . "EHFModules/". $mod .'.pm';  
#Existenzialfrage.  
  (-e $f && -r $f)  
    or return '<b class="warning">Modul '.$mod.' nicht gefunden oder hat keine Leserechte.</b>';  
  require $mod.'.pm'  
    or return '<b class="warning">Modul '.$mod.' kann nicht eingebunden werden.</b>';  
  no strict;  
  
# Bis hierher ok  
# Trouble follows  
  
  ($error, $content) = ( eval{ '$'. $mod . "::process->()" } );  
  
# FEHLER, gibt schlicht "$test::process->()" zurück ohne weiter zu evaluieren.  
  
  ($error, $content) = ( eval{ '$'. $mod . "::process"}->() );  
# gibt  
# Undefined subroutine &$test::process called at blabla  
  
#...  
}

$mod sollte das package des aufzurufenden Moduls enthalten
$mod::FOO ruft aber $FOO in package mod auf

Wie mach ich es richtig?

Den eval Block möchte ich auch weg haben.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische