Recherche…


Syntaxe

  • require Module :: Name; # Requis par nom de @INC
  • nécessite "path / to / file.pm"; # Requis par chemin relatif depuis @INC
  • utiliser Module :: Name; # require et import par défaut à BEGIN
  • utilisez Module :: Name (); # requis et pas d'importation à BEGIN
  • utiliser Module :: Name (@ARGS); # nécessite et importe avec args à BEGIN
  • utiliser Module :: Name VERSION; # demande, contrôle de version et importation par défaut à BEGIN
  • utiliser Module :: Name VERSION (); # demande, contrôle de la version et pas d'importation à BEGIN
  • utilisez Module :: Name VERSION (@ARGS); # requis, contrôle de version, import avec args à BEGIN
  • faire "path / to / file.pl"; # charger et évaluer le fichier donné

Exécuter le contenu d'un autre fichier

do './config.pl';

Cela lira le contenu du fichier config.pl et l'exécutera. (Voir aussi: perldoc -f do .)

NB: Evitez de do sauf si vous jouez au golf ou quelque chose comme il n'y a pas de vérification d'erreur. Pour inclure des modules de bibliothèque, utilisez require ou use .

Chargement d'un module à l'exécution

require Exporter;

Cela garantira que le module Exporter est chargé à l'exécution s'il n'a pas déjà été importé. (Voir aussi: perldoc -f require .)

NB: La plupart des utilisateurs doivent use modules plutôt que require les require . Contrairement à use , require n'appelle pas la méthode d'importation du module et s'exécute à l'exécution, pas pendant la compilation.

Cette façon de charger les modules est utile si vous ne pouvez pas décider des modules dont vous avez besoin avant l'exécution, comme avec un système de plug-in:

package My::Module;
my @plugins = qw( One Two );
foreach my $plugin (@plugins) {
    my $module = __PACKAGE__ . "::Plugins::$plugin";
    $module =~ s!::!/!g;
    require "$module.pm";
}

Cela essaierait de charger My::Package::Plugins::One et My::Package::Plugins::Two . @plugins devrait bien sûr provenir d'une entrée utilisateur ou d'un fichier de configuration pour que cela ait un sens. Notez l'opérateur de substitution s!::!/!g qui remplace chaque paire de deux-points par une barre oblique. En effet , vous pouvez charger des modules en utilisant la syntaxe du nom du module familier de l' use que si le nom du module est un bareword. Si vous transmettez une chaîne ou une variable, elle doit contenir un nom de fichier.

En utilisant un module

use Cwd;

Cela importera le module Cwd au moment de la compilation et importera ses symboles par défaut, c'est-à-dire que certaines des variables et fonctions du module seront disponibles pour le code qui l'utilise. (Voir aussi: perldoc -f use .)

Généralement, cela fera la bonne chose. Cependant, vous voudrez parfois contrôler les symboles importés. Ajoutez une liste de symboles après le nom du module à exporter:

use Cwd 'abs_path';

Si vous faites cela, seuls les symboles que vous spécifiez seront importés (c.-à-d. Que le jeu par défaut ne sera pas importé).

Lors de l'importation de plusieurs symboles, il est idiomatique d'utiliser la construction de liste qw() :

use Cwd qw(abs_path realpath);

Certains modules exportent un sous-ensemble de leurs symboles, mais on peut leur demander d’exporter tout avec :all :

use Benchmark ':all';

(Notez que tous les modules ne reconnaissent pas ou n’utilisent pas la balise :all ).

Utiliser un module dans un répertoire

use lib 'includes';
use MySuperCoolModule;

use lib 'includes'; ajoute le répertoire relatif includes/ comme autre chemin de recherche de module dans @INC . Supposons donc que vous avez un fichier de module MySyperCoolModule.pm intérieur de MySyperCoolModule.pm includes/ , qui contient:

package MySuperCoolModule;

Si vous le souhaitez, vous pouvez regrouper autant de modules que vous le souhaitez dans un même répertoire et les rendre accessibles avec une seule instruction use lib .

À ce stade, l'utilisation des sous-routines du module nécessitera de préfixer le nom du sous-programme avec le nom du package:

MySuperCoolModule::SuperCoolSub_1("Super Cool String");

Pour pouvoir utiliser les sous-programmes sans préfixe, vous devez exporter les noms des sous-programmes afin qu'ils soient reconnus par le programme qui les appelle. L'exportation peut être configurée pour être automatique, donc:

package MySuperCoolModule;
use base 'Exporter';
our @EXPORT = ('SuperCoolSub_1', 'SuperCoolSub_2');

Ensuite, dans le fichier qui use le module, ces sous-routines seront automatiquement disponibles:

use MySuperCoolModule;
SuperCoolSub_1("Super Cool String");

Ou vous pouvez configurer le module pour exporter conditionnellement des sous-routines, donc:

package MySuperCoolModule;
use base 'Exporter';
our @EXPORT_OK = ('SuperCoolSub_1', 'SuperCoolSub_2');

Dans ce cas, vous devez explicitement demander l'exportation des sous-routines souhaitées dans le script use le module:

use MySuperCoolModule 'SuperCoolSub_1';
SuperCoolSub_1("Super Cool String");

CPAN.pm

CPAN.pm est un module Perl qui permet d'interroger et d'installer des modules à partir de sites CPAN.

Il supporte le mode interactif invoqué avec

cpan

ou

perl -MCPAN -e shell

Interroger les modules

De nom:

cpan> m MooseX::YAML

Par une expression régulière contre le nom du module:

cpan> m /^XML::/

Remarque: pour activer un pager ou rediriger vers un fichier | ou > redirection de shell (les espaces sont obligatoires autour des | et > ), par exemple: m /^XML::/ | less

Par distribution:

cpan> d LMC/Net-Squid-Auth-Engine-0.04.tar.gz

Installation de modules

De nom:

cpan> install MooseX::YAML

Par distribution:

cpan> install LMC/Net-Squid-Auth-Engine-0.04.tar.gz

Liste tous les modules installés

En ligne de commande:

cpan -l

À partir d'un script Perl:

use ExtUtils::Installed;
my $inst = ExtUtils::Installed->new();
my @modules = $inst->modules();


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow