How do I "use" a Perl module in a directory not in @INC?
There are several ways you can modify @INC
.
set
PERL5LIB
, as documented in perlrunuse the
-I
switch on the command line, also documented in perlrun. You can also apply this automatically with PERL5OPT, but just use PERL5LIB if you are going to do that.use lib
inside your program, although this is fragile since another person on a different machine might have it in a different directory.Manually modify
@INC
, making sure you do that at compile time if you want to pull in a module with use. That's too much work though.require
the filename directly. While this is possible, it doesn't allow that filename to load files in the same directory. This would definitely raise eyebrows in a code review.
use
takes place at compile-time, so this would work:
BEGIN {push @INC, '..'}
use EPMS;
But the better solution is to use lib
, which is a nicer way of writing the above:
use lib '..';
use EPMS;
In case you are running from a different directory, though, the use of FindBin
is recommended:
use FindBin; # locate this script
use lib "$FindBin::RealBin/.."; # use the parent directory
use EPMS;