Quelle est la différence entre .pm
(Module Perl) et .pl
Fichier (script Perl)?
Dites-moi aussi pourquoi nous revenons 1
du fichier. Si return 2 ou quoi que ce soit d'autre, cela ne génère aucune erreur, alors pourquoi retournons-nous 1
du module Perl?
Au fond, l'extension de fichier que vous utilisez ne fait aucune différence quant à la façon dont Perl
interprète ces fichiers.
Cependant, mettre des modules dans .pm
Les fichiers suivant une certaine structure de répertoires qui suit le nom du paquet sont pratiques. Donc, si vous avez un module Example::Plot::FourD
et vous le mettez dans un répertoire Example/Plot/FourD.pm
dans un chemin dans votre @INC
, alors use
et require
fera le bon choix si le nom du paquet est donné comme dans use Example::Plot::FourD
.
Le fichier doit renvoyer true comme dernière instruction pour indiquer que l'exécution de tout code d'initialisation a réussi. Il est donc habituel de terminer un tel fichier avec
1;
_ sauf si vous êtes sûr que cela retournera vrai sinon. Mais il vaut mieux mettre le1;
, au cas où vous ajouteriez d'autres déclarations.Si
EXPR
est un mot nu, lerequire
suppose une extension ".pm" et remplace "::" par "/" dans le nom du fichier pour vous faciliter le chargement des modules standard. Cette forme de chargement de modules ne risque pas de modifier votre espace de noms.
Tout ce que use
fait, c'est trouver le nom du fichier à partir du nom du paquet fourni, require
dans un bloc BEGIN
et invoquer import
sur le paquet. Rien ne vous empêche de ne pas utiliser use
mais de suivre ces étapes manuellement.
Par exemple, ci-dessous, je mets le Example::Plot::FourD
package dans un fichier nommé t.pl
, le charge dans un script du fichier s.pl
.
C:\Temp> cat t.pl
package Example::Plot::FourD;
use strict; use warnings;
sub new { bless {} => shift }
sub something { print "something\n" }
"Example::Plot::FourD"
C:\Temp> cat s.pl
#!/usr/bin/Perl
use strict; use warnings;
BEGIN {
require 't.pl';
}
my $p = Example::Plot::FourD->new;
$p->something;
C:\Temp> s
something
Cet exemple montre que les fichiers de module ne doivent pas nécessairement se terminer par 1
, toute vraie valeur fera l'affaire.