En Perl, deux opérateurs principaux sont utilisés pour connecter des modules : use et require.
use — Connecte le module au moment de la compilation. S'exécute immédiatement lors de la lecture du fichier Perl, charge le module dans l'espace de visibilité et appelle la méthode import (si elle existe).
require — Effectue le chargement du module pendant l'exécution (run-time).
require $some_module;).Exemple :
use MyModule; # temps de compilation; appelle import require 'MyModule.pm'; # temps d'exécution; pas d'importation
Peut-on utiliser
useavec un nom de module variable, par exemple,use $module_name;?
Réponse : Non. L'opérateur use nécessite un nom de module statiquement connu au moment de la compilation, tandis que require convient pour les noms de variables.
Exemple :
my $module = 'Some::Plugin'; require $module; $module->import();
Histoire
Le projet est écrit avec un grand nombre de plugins chargés dynamiquement. Un des développeurs a par erreur utilisé 'use $plugin', ce qui a causé une erreur de compilation. Il a ensuite été découvert que le chargement n'est possible que par require, et uniquement ensuite l'appel de import.
Histoire
Dans un grand service Perl, certaines bibliothèques étaient chargées par 'require', sans appel de import. Les variables et fonctions sur lesquelles ils comptaient n'avaient pas été importées dans l'espace de noms, et le code a commencé à se terminer par des erreurs de sous-programme indéfini.
Histoire
Un développeur a essayé de connecter un grand bloc de code à l'intérieur d'une fonction via 'use', s'attendant à ce que le module soit chargé uniquement si nécessaire, mais en pratique, le module a été pris en charge dès le départ, ce qui a conduit à un gaspillage de mémoire inutile.