INTRODUCTION À PERL
Les paquetages
Perl offre un moyen de protéger les variables d’un éventuel conflit de nom grâce au mécanisme des paquetages (ou encore espaces de nommage). Un paquetage est déclaré par le mot-clé package, suivi du nom du paquetage, et s’étend jusqu’à la fin du bloc (ou du fichier, les paquetages étant généralement définis chacun dans leur propre fichier) ou à la prochaine déclaration de paquetage.. On accède ensuite depuis l’extérieur aux variables et aux fonctions du paquetage en les précédant du nom du paquetage suivi de ::. Il est possible de subdiviser les paquetages en sous-paquetages, ad nauseam. Le paquetage principal est appelé main. Voici un exemple :
package Arb; $a = 1;
package main; $a = 2; print $a, « \n »; # renverra 2 print $Arb::a, « \n »; # renverra 1
Les modules
Principe
Les modules sont une extension du concept de paquetage : ce sont des paquetages définis dans un fichier de même nom que le module, et qui sont destinés à être réutilisés. On inclut un module grâce à la ligne suivante :
use Module;
ce qui va en fait être interprété comme
BEGIN { require « Module.pm »; import Module; }
use effectue un import en plus du require, ce qui a pour effet d’importer les définitions des fonctions dans l’espace du paquetage courant. Voici l’explication :
require Cwd; # make Cwd:: accessible $here = Cwd::getcwd();
use Cwd; # import names from Cwd:: $here = getcwd();
require Cwd; # make Cwd:: accessible $here = getcwd(); # oops! no main::getcwd()
Modules existants
Une liste complète est régulièrement postée dans les news et archivée sur les sites CPAN (voir l’introduction). Un certain nombre est livré dans la distribution standard de perl, le reste se trouve également sur les sites CPAN. Les plus importants sont ceux qui permettent de gérer différents formats de bases de données (NDBM_File, GDBM_File, …), CGI qui fournit une interface très agréable à utiliser lors de l’écriture de scripts CGI,GetCwd qui permet de ne pas avoir à faire un appel à /bin/pwd pour obtenir le répertoire courant, Fcntl qui permet d’accéder aux constantes définies dans fcntl.h, FileHandle qui fournit des méthodes pour accéder aux filehandles, Find qui traverse une arborescence, GetOptions, POSIX qui permet d’accéder aux fonctions POSIX, Tk qui permet de construire des applications graphiques,.