This seems like a really simple question but somehow my Google-Fu failed me.
What\'s the syntax for including functions from other files in Perl? I\'m looking for s
What are you looking for is 'require file.pl', but what you should be looking at is 'use module'.
The above answers all ignored the client part: How to import the module.
See the accepted answer here: How do I use a Perl module from a relative location?
Without the trick in this answer, you'll have plenty of trouble trying to get the module path right when you use $mymodule;
I believe you are looking for the require or use keywords.
I know the question specifically says "functions", but I get this post high up in search when I look for "perl include", and often times (like now) I want to include variables (in a simple way, without having to think about modules). And so I hope it's OK to post my example here (see also: Perl require and variables; in brief: use require
, and make sure both "includer" and "includee" files declare the variable as 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
Also, do 'file.pl';
will work, but modules are the better solution.
Perl require will do the job. You will need to ensure that any 'require'd files return truth by adding
1;
at the end of the file.
Here's a tiny sample:
$ 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.
But migrate to modules as soon as you can.
EDIT
A few benefits of migrating code from scripts to modules:
require
are only loaded at run time, whereas packages loaded with use
are subject to earlier compile-time checks.