所以对于一个特定的CGI perl脚本,我包含了这样的JSON来处理一些.json文件:
use lib "./modules/JSON/lib";
use JSON;
这工作得很好。Web 目录包含模块文件夹中所需的文件。
但是,JSON 模块非常慢。我读到JSON:XS可以快得多,但我似乎不能简单地使用它:
use lib "./modules/JSON-XS";
use JSON::XS;
JSON-XS文件中没有lib文件夹,我已经尝试了使用组合(即同时使用文件夹等),但它不起作用。
不,我不能简单地为这个特定项目安装模块。
任何帮助,不胜感激。
不,我不能简单地为这个特定项目安装模块。
如果不安装模块,则无法使用模块。你只是侥幸做了一个半途而废的工作。不过,这不适用于 JSON::XS。它之所以快速,是因为它是用 C 语言编写的,所以你需要编译 C 代码。到目前为止,最简单的方法是使用提供的安装程序,而不是重新发明轮子。
(您知道可以将模块安装到任何目录中,并且这不需要特殊权限,对吗?
Perl 发行版通常可以在卸载状态下使用。您只需要调用perl Makefile.PL && make
(或对于基于 Module::Build
的发行版:perl Build.PL && ./Build
)。这将执行所有必要的编译(如果是XS模块)并将库文件复制到blib
子目录中。在你的脚本中,而不是use lib
你会写use blib
:
use blib "/path/to/JSON-XS";
请注意,如果模块具有依赖项,则必须自己解决它并添加许多use blib
语句。 JSON::XS
没有那么多依赖关系,但对于其他模块来说真的很不方便。在这种情况下,您可能应该寻求另一种解决方案,例如将CPAN.pm
与local::lib
一起使用。
这终于对我有用了:
我对所有依赖项都执行了此过程(按照没有依赖项到更多依赖项的顺序)
export PERL5LIB = ~/path/to/modules/perl5
perl Makefile.PL PREFIX=$PERL5LIB LIB=$PERL5LIB
make
make test
make install
这会将所有模块安装到我称为 perl5 的目录中。这也意味着当您尝试在本地安装其他模块时,由于前缀/LIB 的添加,依赖项问题不会出现。
然后我所做的就是把它添加到我的perl CGI脚本中:
use lib "./modules/perl5";
use JSON::XS;
PS: JSON::XS 快多了!
:D