1

如果我创建一个 Perl 模块并将其安装为

perl Makefile.PL prefix=/path/to/perllib

然后我希望能够将 PERL5LIB 设置为 /path/to/perllib 并找到该模块。情况似乎并非如此。该模块被安装到 /path/to/perllib/site_perl/5.8.5/,所以这就是 PERL5LIB 必须设置的(或传递给“使用库”)。

我在如何安装模块或如何设置 PERL5LIB 方面做错了什么?

4

4 回答 4

4

您将 PREFIX= 和 LIB= 混为一谈。

发行版不仅包含模块。一方面,文档没有安装在与模块本身相同的目录中。PREFIX= 告诉 Perl 所有组件的基本路径。

LIB= 告诉 Perl 在哪里安装模块。

使用(例如)

perl Makefile.PL PREFIX=~ LIB=~/lib/perl5

然后你会使用

export PERL5LIB=~/lib/perl5
于 2012-07-26T15:39:23.243 回答
2

不,这就是它的工作原理。前缀表示安装的根目录,但库目录通常位于该目录结构的更深处。

但是,如果您安装多个具有相同前缀的模块,它们应该都可以使用相同的PERL5LIB值。

于 2012-07-26T14:03:26.590 回答
2

长话短说,使用INSTALL_BASE代替PREFIX. 它的工作方式更像--prefix其他安装程序,并创建可预测的安装模式。然后你可以设置PERL5LIB<INSTALL_BASE>/lib/perl5

ExtUtils::MakeMaker::FAQ解释:

PREFIX 的行为很复杂,并且密切依赖于 Perl 的配置方式。由此产生的安装位置会因机器而异,甚至同一台机器上的 Perl 安装也会不同。因此,很难记录前缀将放置模块的位置。

相反,INSTALL_BASE 具有可预测的、易于解释的安装位置。现在 Module::Build 和 MakeMaker 都有 INSTALL_BASE ,除了保留现有的安装位置之外,几乎没有理由使用 PREFIX。如果您要开始全新的 Perl 安装,我们鼓励您使用 INSTALL_BASE。如果您通过 PREFIX 安装了现有安装,请考虑将其移动到与 INSTALL_BASE 匹配的安装结构并改用它。

于 2012-07-26T16:57:41.283 回答
0

What version of perl? You should only have to specify the path up to 'site_perl'. For libraries not under site_perl, you should also specify the path up to 'perllib'. More recent versions of perl (5.8 or better?) are better at letting you specify only these two directories, without having to specify version and architecture directories.

于 2012-07-26T15:08:33.310 回答