1

Bonsoir à vous !
J'ai un problème assez difficile a expliquer, mais je vais essayer ^^
Pour mes besoins personels je cherche a crèer une interface d'accès a des forums, en utilisant un script PERL local comme il ya plusieurs forums, je cherche à creer un programme commun, et différents modules pour chaque forum
Comment puis je utiliser une fonction (mettons, access()) a partir du programme commun, mais qui appelle la fonction access() dans les modules ?
En gros je voudrais utiliser une fonction access() présente dans tout les modules, mais en l'utilisant dans le programme principal...

J'avais pensé à cela mais sa ne marche pas :

$mod=@ARGV(1)
if( $mod eq "phpbb"){ require phpbb };
print $mod::access();

Comment puis-je faire ?
gros boulay qui oublie toujours de tourner les pages des post yn...
Debian Pawaa
Linux Pawaa

2

à 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 strictwink

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
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3

ah, j'oubliais
avant de charger le code de la fonction (avant de faire un load_file_code), il se peut qu'il soit nécessaire d'indéfinir la fonction access, de sorte à ce que l'interpréteur Perl n'ait pas l'impression que tu essayes (dans le eval) de re-définir une fonction qui existe déjà.
Pour ça, un appel à "undef" devrait suffir
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

4

Waah ! Merci beaucoup c'est pile ce qu'il me fallait !!
J'avais pas du tout pensé à évaluer le code avec eval ^^ Scripting Languages pawaa ! tongue
Au diable les .pm !!
Merci beaucoup !
gros boulay qui oublie toujours de tourner les pages des post yn...
Debian Pawaa
Linux Pawaa

5

Waaaa ! Sa marche !!
Merci encore !!
gros boulay qui oublie toujours de tourner les pages des post yn...
Debian Pawaa
Linux Pawaa

6

De rien smile

(pour une fois qu'il y a un peu de vie dans cette section du forum... cheeky )
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall