La manière normale, de nos jours, d'inclure un module est d'utiliser l'opérateur use :
1 2
| use my_module;
use my_other_module qw /func1, func2, func3/; |
La première syntaxe n'importe du module que les fonctions qui sont automatiquement exportées par le module. La seconde syntaxe spécifie une liste de fonctions que l'on veut utiliser. Mais l'opérateur use est exécuté à la compilation, et ne peut donc dépendre de conditions qui ne seront connues qu'à l'exécution.
Je pense franchement que le plus simple serait d'utiliser use pour importer inconditionnellement tous les modules dont tu peux avoir besoin (à moins qu'ils ne soient vraiment trop gros ou trop nombreux, ou qu'il y ait des dangers de collisions de noms, ce qui serait sans doute le signe d'une conception fautive).
Mais, si tu veux vraiment faire un import conditionnel, alors il faut comprendre que:
1 2
|
use my_other_module qw /func1, func2, func3/; |
est équivalent à:
BEGIN { require my_other_module; my_other_module->import( qw /func1, func2, func3/ ); }
L'opérateur require est moins puissant que use, mais l'avantage de require dans ton cas est qu'il n'importe les fonctions du module qu'à l'exécution, et que l'importation peut donc être rendue conditionnelle.
Je te conseille d'éviter les deux autres opérateurs susceptibles d'importer du code dans ton programme, eval et do, car ils sont bien moins perfectionnés et exigent bien plus de travail de vérification.
Les opérateurs use et require présentent au moins les deux avantages suivants:
- un module n'est chargé qu'une et une seule fois, même si par exemple ton module_A et ton module_B, tous les deux appelés par ton programme, incluent tous les deux le module_C. Avec do ou eval, cela conduirait à des problèmes de redéfinition des mêmes fonctions et des warnings (et tu actives les warnings, j'espère).
- Toute erreur de syntaxe dans le fichier inclus entraîne la mort du programme. Pas besoin de vérifier s'il y a eu un problème en consultant le contenu de la valeur de la variable $@ comme il faut impérativement le faire avec eval et do.
Les opérateurs eval et do restent très utiles pour leurs autres usages, mais ils sont obsolètes et à éviter pour inclure du code d'un autre fichier dans le fichier courant. Les opérateurs use (préférentiellement) et accessoirement dans certains cas particuliers require sont ceux qu'il faut utiliser de nos jours.
Partager