à la limite (je vais peut-être dire une bétise, vu que j'ai pas essayé ^^), mais doit y avoir moyen de gruger avec eval.
voyons voir...
tu as ton programme principal.
dans celui-ci, tu déclares le prototype de ta fonction access
genre
sub access();
(plus propre de déclarer les prototypes ; même si c'est pas obligatoire si tu n'as pas fait un use strict
ensuite, dans chacun de tes modules, tu déclare le code de ta fonction access.
par exemple, dans phpbb.pl :
sub access()
{
print "coucou, ceci est phpbb\n";
}
Et tu reviens à ton programme principal. au sein de celui-ci, tu déclare une fonction dont le role va être de charger la fonction access depuis le bon fichier ; en gros, ça donne à peu près ça :
sub load_file_code($)
{
my $file = $_[0];
my $code = "";
open FILE, $file
or return "Impossible d'ouvrir le fichier $file : $!";
while(defined(my $ligne=<FILE>))
{
$code .= $ligne;
}
close FILE;
eval($code);
if($@)
{
return $@;
}
}
(reprise d'un de mes projets qui faisait du chargement dynamique de code sans quitter le programme principal ; pas relu => possible qu'il y ait un ou deux trucs à modifier par rapport à ce que toi tu veux faire)
et ensuite, toujours dans ton programme principal, quand tu veux charger la fonction access qui correspond à ton module phpbb, tu fais
load_file_code("phpbb.pl");
et normalement, quand, par la suite, tu appelleras ta fonction access, ça sera le code contenu dans la fonction access du fichier phpbb.pl qui sera exécuté
en tout cas, en faisant ça, j'ai fait un programme qu'on pouvait modifier sans avoir à quitter celui-ci : on lançait le programme, et chaque fois qu'il se prennait un SIGHUP, il rechargeait le code de toutes ses fonctions, chacune contenue dans un fichier externe