Perl - 如何引用本地安装的模块?

时间:2015-09-18 05:59:09

标签: perl local perl-module

我有一个模块Term:TermKey,它位于TermKey.pm文件中。我不想把它安装到我的perl中;我希望它在本地引用,以便脚本可以移动到其他机器而不会弄乱每个perl安装。我该怎么做呢?我在网上看到的所有推荐都没有。我总是得到某种形式:

Can't locate loadable object for module Term::TermKey in @INC (@INC   contains: /home/fritz/multi.kodis/Term /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at test.pl line 6.
Compilation failed in require at test.pl line 6.
BEGIN failed--compilation aborted at test.pl line 6.

测试一下。我将TermKey.pm的副本放在以下所有内容中:

./TermKey.pm
./Term/TermKey.pm
./Term/Term/TermKey.pm

(就像测试一样)

但它并不适用于任何一个:

use lib '';
use Term::TermKey;

use lib '.';
use Term::TermKey;

use lib './';
use Term::TermKey;

use lib './Term';
use Term::TermKey;

use lib './Term/';
use Term::TermKey;

use lib '/home/[user]/[project]'
use Term::TermKey;

use lib '/home/[user]/[project]/Term'
use Term::TermKey;

use FindBin;                 
use lib "$FindBin::RealBin"; 
use Term::TermKey;

到底是什么?这应该很简单,我错过了什么?

1 个答案:

答案 0 :(得分:8)

“找不到模块的可加载对象”并不意味着Perl找不到Term / TermKey.pm。这意味着它无法找到Term / TermKey.so(或者在您的平台上调用任何共享库)。

Term::TermKey不是纯Perl模块。相反,它包含XS代码,需要将其编译为C,然后再编译到共享库中。此外,该库链接到libtermkey,该cpanm也必须安装在您的系统上。

这使得将模块从系统移动到系统变得更加困难。为Perl 5.18.2编译的XS模块不适用于5.20.0;它必须重新编译。您可以升级次要版本(例如从5.18.0升级到5.18.2)而无需重新编译,但不能保证其他方向(从5.18.2升级到5.18.0)。

因此,如果所有计算机在安装了相同库的同一操作系统上运行相同版本的Perl,则可能能够使用此功能。最简单的方法(如果它可以工作)将是安装local::lib和{{3}}并执行以下操作:

cpanm --local-lib some-dir Term::TermKey

然后你可以将some-dir复制到另一台机器上(上面列出了警告)。没有必要在其他机器上安装local :: lib;你可以

use lib 'some-dir/lib/perl5';