Chargement dynamique de modules - Perl - Programmation
Marsh Posté le 13-02-2008 à 10:28:19
Bon en fait j'ai trouvé comment faire "à la main". Il suffit de faire un eval "use module_name", et ensuite on peut appeler des méthodes sur des chaines de caractère (genre "ClassName"->MethodName). Je pensais avoir déja essayé ça hier mais j'avais du faire une connerie, aujourd'hui ça marche :
# |
Ce code charge tous les modules sous le répertoire "CfgMethod", créé une instance de chaque module, et retourne un hash ("nom du module" => objet) ("nom du module" étant le nom renvoyé par la méthode "GetName" que doit définir chaque plugin).
Marsh Posté le 13-02-2008 à 09:13:35
En Perl, comment peut-on charger dynamiquement (à l'exécution) un module et instancier la classe qu'il représente ?
Conrètement j'ai une classe A dont héritent plusieurs classes B, C, D. Mes classes filles B, C, D. sont en fait des "plugins" qui implémentent l'interface décrite par A. Je ne les connais pas au moment où j'écris le code ; je voudrais pouvoir, à l'éxécution, charger dynamiquement tous les modules B.pm, C.pm, D.pm, présents dans un répertoire donné, et créer une instance des classes B, C, D.
J'ai vu qu'il existe un module Module::Pluggable qui semble faire ce genre de choses, mais la doc est un peu succinte. Si vous avez des exemples, ou si vous savez comment faire "à la main", je suis preneur.
Message édité par matafan le 13-02-2008 à 09:15:26