75 votes

Comment inclure des fonctions d'un autre fichier dans mon script Perl?

Cela semble être une question très simple, mais mon Google-Fu m'a échoué.

Quelle est la syntaxe pour inclure des fonctions à partir d'autres fichiers dans Perl? Je cherche quelque chose comme C's #include "blah.h"

J'ai vu l'option d'utiliser des modules Perl, mais cela semble nécessiter une réécriture non négligeable de mon code actuel.

75voto

daotoad Points 17916

Utilisez un module. Découvrez perldoc perlmod et Exporter .

Dans le fichier Foo.pm

 package Foo;
use strict;
use warnings;
use Exporter;

our @ISA= qw( Exporter );

# these CAN be exported.
our @EXPORT_OK = qw( export_me export_me_too );

# these are exported by default.
our @EXPORT = qw( export_me );

sub export_me {
    # stuff
}

sub export_me_too {
    # stuff
}

1;
 

Dans votre programme principal:

 use strict;
use warnings;

use Foo;  # import default list of items.

export_me( 1 );
 

Ou pour obtenir les deux fonctions:

 use strict;
use warnings;

use Foo qw( export_me export_me_too );  # import listed items

export_me( 1 );
export_me_too( 1 );
 

Vous pouvez également importer des variables de package, mais cette pratique est fortement déconseillée.

53voto

martin clayton Points 41306

Perl exiger que va faire le travail. Vous aurez besoin pour s'assurer que tout 'avais besoin de fichiers de retour de la vérité par l'ajout d'

1;

à la fin du fichier.

Voici un petit échantillon:

$ cat m1.pl 
use strict;
sub x { warn "aard"; }
1;

$ cat m2.pl 
use strict;
require "m1.pl";
x();

$ perl m2.pl 
aard at m1.pl line 2.

Mais migrent vers les modules dès que vous le pouvez.

MODIFIER

Quelques avantages de la migration de code à partir de scripts pour les modules:

  • Sans paquets, tout ce qui occupe un espace de noms unique, de sorte que vous peut se heurter à une situation où les deux fonctions de fichiers séparés veux le même nom.
  • Un package vous permet d'exposer certaines fonctions, mais d'en dissimuler d'autres. Avec pas de paquets, toutes les fonctions sont visibles.
  • Fichiers inclus avec require sont seulement chargés au moment de l'exécution, tandis que les forfaits avec use sont soumis au plus tôt au moment de la compilation des contrôles.

10voto

glenn jackman Points 69748

En outre, do 'file.pl'; fonctionnera, mais les modules sont la meilleure solution.

8voto

Daniel Plaisted Points 11183

Je crois que vous recherchez les mots-clés require ou use .

4voto

Benj Points 12084

Vous devriez vraiment regarder dans les modules Perl, cependant, pour un piratage rapide, vous pouvez toujours exécuter "perl -P", qui exécute votre script Perl via le pré-processeur C. Cela signifie que vous pouvez faire des #includes et des amis ....

Seulement un rapide bidouillage, méfiez-vous ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X