ProgrammationDéveloppeur Backend

Quels sont les moyens d'organisation et d'importation des modules dans Perl ? Comment fonctionne le système @INC et use/require ? Donnez un exemple de création et de connexion d'un module personnalisé.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

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.

  • Pour connecter un module, on utilise use (au moment de la compilation) et require (au moment de l'exécution).
  • Lors de la recherche d'un module, Perl utilise un tableau spécial @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.

Question piège

Quelle est la différence entre use et require ? Quand utiliser quel opérateur ?

Réponse :

  • use — agit au moment de la compilation, appelle automatiquement import (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.

Exemples d'erreurs réelles dues à une méconnaissance des subtilités du sujet


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, car require n'appelle pas import. 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 lib ou 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 de use Foo;. Perl n'a pas trouvé le module, ce qui a perturbé le fonctionnement des parties critiques de l'application.