How do I include a Perl module that's in a different directory? It needs to be a relative path from the module that's including it.
I've tried
push ( @INC,"directory_path/more_path");
also
push ( @INC,"directory_path\\more_path");
Thank you!
-
'use lib' can also take a single string value...
#!/usr/bin/perl use lib '<relative-path>'; use <your lib>; -
EDIT: Putting the right solution first, originally from this question. It's the only one that searches relative to the module directory:
use FindBin; # locate this script use lib "$FindBin::Bin/.."; # use the parent directory use yourlib;There's many other ways that search for libraries relative to the current directory. You can invoke perl with the -I argument, passing the directory of the other module:
perl -I.. yourscript.plYou can include a line near the top of your perl script:
use lib '..';You can modify the environment variable PERL5LIB before you run the script:
export PERL5LIB=$PERL5LIB:..The push(@INC) strategy can also work, but it has to be wrapped in BEGIN{} to make sure that the push is run before the module search:
BEGIN {push @INC, '..'} use yourlib;Andomar : Cheers, looks like everyone read "current directory" where you wrote "module's directory". -
Most likely the reason your push did not work is order of execution.
useis a compile time directive. Youpushis done at execution time:push ( @INC,"directory_path/more_path"); use Foo.pm; # In directory path/more_pathYou can use a BEGIN block to get around this problem:
BEGIN { push ( @INC,"directory_path/more_path"); } use Foo.pm; # In directory path/more_pathIMO, it's clearest, and therefore best to
use lib:use lib "directory_path/more_path"; use Foo.pm; # In directory path/more_pathSee perlmod for information about BEGIN and other special blocks and when they execute.
-
From perlfaq8:
How do I add the directory my program lives in to the module/library search path?
(contributed by brian d foy)
If you know the directory already, you can add it to @INC as you would for any other directory. You might use lib if you know the directory at compile time:
use lib $directory;The trick in this task is to find the directory. Before your script does anything else (such as a chdir), you can get the current working directory with the Cwd module, which comes with Perl:
BEGIN { use Cwd; our $directory = cwd; } use lib $directory;You can do a similar thing with the value of $0, which holds the script name. That might hold a relative path, but rel2abs can turn it into an absolute path. Once you have the
BEGIN { use File::Spec::Functions qw(rel2abs); use File::Basename qw(dirname); my $path = rel2abs( $0 ); our $directory = dirname( $path ); } use lib $directory;The FindBin module, which comes with Perl, might work. It finds the directory of the currently running script and puts it in $Bin, which you can then use to construct the right library path:
use FindBin qw($Bin);
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.