Forum Programmation.perl Appel de fonction dynamique sans eval?

Posté par  (site web personnel) .
Étiquettes : aucune
0
3
avr.
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!
  • # TIMTOWTDI

    Posté par  (site web personnel) . É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  (site web personnel) . É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 :)
  • # Commentaire supprimé

    Posté par  . Évalué à 2.

    Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

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