我接管了一个用Perl编写的项目,它有一些依赖项,例如Template::Toolkit
,Image::ExifTool
和GD
等等。目前,使用--prefix
中的make
选项将这些依赖项内置到目录(“deps”文件夹)中。在主要的Perl脚本中,我有类似下面的东西来导入必要的模块:
use File::Spec::Functions qw(catdir);
use lib "lib";
use lib catdir(qw(deps lib perl5 site_perl));
catdir
用于偏离某些系统要求(例如假设'/'是文件夹分隔符;如果有人有另一种选择,我愿意接受建议!)。 “lib”文件夹包含我的模块,“deps / lib / perl5 / site_perl”文件夹是我的原始机器上安装了依赖项的地方。
但是,在另一台机器上构建依赖项之后,似乎所需的库已经移动到不同的文件夹。我现在需要使用这些语句来使我的脚本正确运行:
use File::Spec::Functions qw(catdir);
use lib "lib";
use lib catdir(qw(deps lib perl 5.14.2));
use lib catdir(qw(deps share perl 5.14.2));
我想知道是否有指定前缀目录(“deps”)并让use lib
pragma递归搜索该目录中的依赖项。此外,此脚本的用户无法访问Internet,因此将我的项目编译为CPAN模块将会适得其反。
感谢您的帮助!
答案 0 :(得分:3)
安装模块时使用INSTALL_BASE for the Makefile.PL和--install_base for Build.PL。他们提供stable install locations。 PREFIX和--prefix尝试模拟perl如何布局其系统库,并且对于制作包更有用。
此外,您还需要在路径上运行rel2abs
,然后再将其提供给lib,以便为您提供绝对路径。这将保护您,以防您的代码chdir
,然后尝试require
模块。或者您可以使用lib::abs。
并且ikegami是正确的,没有必要将文件路径传递给lib portable。只需以Unix风格传递它们。 Perl会弄明白的。