Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.perl

Programmation.perl : Appel de fonction dynamique sans eval?

Posté par eMerzh (Jabber id, page perso, ) le 03 avril 2006
Hello,
voila je suis occuper à créer un programme qui parse pas mal de ligne dans un fichier.
il effectue des actions chaque ligne dans différents modules que je charge en fonction d'un fichier de configuration.

pour l'appel des fonction , j'utilise un eval($NomdeFct.'()')
je trouve pas ca fort propre, de plus, ce code rallenti beaucoup ( plus de 2X) le code...
y'aurai t-il pas un moyen plus élégant et surtout plus rapide d'executer des fonctions dont on connait le nom que de part un fichier de config.

Merci pour votre aide!

> Lire le message (3 commentaires, moyenne: 2).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

TIMTOWTDI

Posté par Moun's (page perso, ) le 03/04/2006 à 12:45. (lien). Évalué à 3.

les solutions restent :
- une table de hachage qui contient en clé le nom de la sub et en valeur une reference sur une sub anonyme
- l'import directement dans l'espace de perl de la dite sub

pour ces deux cas, tu peux faire un truc avec 1 seul eval à l'importation, pleins de eval a chaque appel.

le principe du 1 seul eval à l'import peut se resoudre encore une fois de plein de maniere differente ... la plus évidente et sans finesse perl ( peu performante mais qui a le merite d'etre clair ) :
- tu lis le fichier contenant ton source perl
- tu en fais un eval

si par hasard, tu lis la doc perl, tu verras qu'il a deux fonctions largement optimisé qui fait cela à l'execution do et require .

maintenant, n'oublie pas que toute sub que tu as deja importé par require / do / use est directement appelable par appel indirect de fonction grace à &{$nom_de_la_sub} ou $nom_de_la_sub() .

si tu veux controler un minimum, tu fais l'appel en passant par un code de verification de la chaine contenant le nom de la sub a éxecuter.

  • [^]Re: TIMTOWTDI

    Posté par eMerzh (Jabber id, page perso, ) le 03/04/2006 à 13:29. (lien). Évalué à 1.

    wééé merci, j'avais pas vu qu'il était possible de faire des réferences de fonction et de les stocker dans un hash.
    je croi que je vais lire le fichier , faire les eval et stocker les référence à appeler en temps voulu...
    merci beaucoup :)

Ca ?

Posté par alenvers () le 03/04/2006 à 12:54. (lien). Évalué à 2.

Cela ne suffit-il pas ?


$ perl -e 'sub t { print @_ };$p=\&t ; &$p("plop\n","hggh\n");'
plop
hggh

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.perl