0

So for a particular CGI perl script I have included JSON like this to handle some .json files:

use lib "./modules/JSON/lib";
use JSON;

This works fine and well. The web directory holds the files required in the modules folder.

However, the JSON module is very slow. I read that JSON:XS can be much, much faster but I can't seem to simply use it as so:

use lib "./modules/JSON-XS";
use JSON::XS;

There is no lib folder in the JSON-XS files, i've tried combinations of use (ie, using both folders and etc) but it didn't work.

And no I cannot simply install the module for this particular project.

Any help is appreciated.

4

3 回答 3

2

不,我不能简单地为这个特定项目安装模块。

不安装模块就不能使用它。你只是做了一件半途而废的工作。不过,这不适用于 JSON::XS。它快速的原因是因为它是用 C 编写的,所以你需要编译 C 代码。到目前为止,最简单的方法是使用提供的安装程序,而不是重新发明轮子。

(您知道您可以将模块安装到任何目录中,并且这不需要特殊权限,对吧?)

于 2013-11-01T13:48:28.840 回答
1

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.pmwith local::lib

于 2013-11-01T22:53:06.893 回答
0

好的,这终于对我有用:

我对所有依赖项做了这个过程(按照没有依赖项到更多依赖项的顺序)

export PERL5LIB = ~/path/to/modules/perl5
perl Makefile.PL PREFIX=$PERL5LIB LIB=$PERL5LIB
make
make test
make install

这会将所有模块安装到我称为 perl5 的目录中。这也意味着当您尝试在本地安装其他模块时,由于添加了 PREFIX/LIB,因此不会出现依赖关系问题。

然后我所做的就是将它添加到我的 perl CGI 脚本中:

use lib "./modules/perl5";
use JSON::XS;

PS:JSON::XS 快得多!

:D

于 2013-11-02T01:41:29.877 回答