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
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische