Pour organiser le code en Perl, on utilise des modules (packages), qui sont placés dans des fichiers séparés avec l'extension .pm.
use (au moment de la compilation) et require (au moment de l'exécution).@INC — c'est une liste de répertoires où Perl cherche des modules.Exemple de module :
Foo.pm
package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;
Connexion et utilisation :
use lib '.'; # Ajoute le dossier courant à @INC use Foo; Foo::say_hello(); # Affiche : Hello from Foo!
Principales différences :
use importe le module au début de l'exécution du script et appelle automatiquement la méthode import, si elle existe.require charge le module uniquement lors de son premier appel.Quelle est la différence entre use et require ? Quand utiliser quel opérateur ?
Réponse :
use— agit au moment de la compilation, appelle automatiquementimport(utilisé généralement pour les modules).require— agit pendant l'exécution, nécessaire lorsque le nom du module est inconnu avant l'exécution ou qu'il n'est pas toujours nécessaire de l'importer.
Histoire
Dans un grand projet, un module personnalisé a été connecté via
require, oubliant qu'il utilise des fonctions exportées. La fonction utilisée n'a pas été exportée, carrequiren'appelle pasimport. Résultat — l'importation de symboles ne fonctionne pas, il faut appeler les fonctions explicitement.
Histoire
Lors du déplacement du module dans un dossier séparé, on a oublié d'ajouter le chemin au dossier avec
use libou de modifier la variable@INC. Le module n'a pas été trouvé, le script s'est terminé par une erreur, même si le fichier était au bon endroit par rapport au projet.
Histoire
Dans une ancienne application, le module a été nommé avec une lettre minuscule, mais a été connecté avec une majuscule :
use foo;au lieu deuse Foo;. Perl n'a pas trouvé le module, ce qui a perturbé le fonctionnement des parties critiques de l'application.