Cela semble être une question vraiment simple, mais mon Google-Fu m'a échoué.
Quelle est la syntaxe pour inclure des fonctions 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.
Utilisez un module. Découvrez perldoc perlmod et Exportateur .
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 la pratique est fortement déconseillée.
Perl obligatoire fera le travail. Vous devrez vous assurer que tous les fichiers requis renvoient la vérité en ajoutant
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 migrez vers les modules dès que vous le pouvez .
[~ # ~] modifier [~ # ~]
Quelques avantages de la migration du code des scripts vers les modules:
require
ne sont chargés qu'au moment de l'exécution, tandis que les packages chargés avec use
sont soumis à des vérifications antérieures lors de la compilation.Également, do 'file.pl';
fonctionnera, mais les modules sont la meilleure solution.
Je sais que la question dit spécifiquement "fonctions", mais je reçois ce poste en haut de la recherche lorsque je cherche "Perl include", et souvent (comme maintenant) je veux inclure des variables (de manière simple, sans avoir à penser sur les modules). Et donc j'espère que c'est OK de poster mon exemple ici (voir aussi: Perl require and variables ; en bref: utilisez require
, et assurez-vous que les fichiers "Includeer" et "Includeee" sont à la fois déclarer la variable comme our
):
$ Perl --version
This is Perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi ...
$ cat inc.pl
use warnings;
use strict;
our $xxx = "Testing";
1;
$ cat testA.pl
use warnings;
use strict;
require "inc.pl";
our $xxx;
print "1-$xxx-\n";
print "Done\n";
$ Perl testA.pl
1-Testing-
Done
$ cat testB.pl
use warnings;
use strict;
our $xxx;
print "1-$xxx-\n";
$xxx="Z";
print "2-$xxx-\n";
require "inc.pl";
print "3-$xxx-\n";
print "Done\n";
$ Perl testB.pl
Use of uninitialized value $xxx in concatenation (.) or string at testB.pl line 5.
1--
2-Z-
3-Testing-
Done
Ce que vous recherchez est "require file.pl", mais ce que vous devriez regarder est "use module".
Vous devriez vraiment regarder dans les modules Perl cependant, pour un hack 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 #include et amis ....
Un simple hack cependant, méfiez-vous ;-)
Les réponses ci-dessus ont toutes ignoré la partie client: comment importer le module.
Voir la réponse acceptée ici: Comment utiliser un module Perl à partir d'un emplacement relatif?
Sans l'astuce dans cette réponse, vous aurez beaucoup de mal à essayer de trouver le chemin du module correctement lorsque vous use $mymodule;