不能在CGI perl脚本中本地包含JSON :: XS模块,但可以包含JSON模块

时间:2013-11-01 13:05:30

标签: json perl perl-module

因此,对于特定的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文件夹,我尝试过使用组合(即使用两个文件夹等),但它没有用。

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

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

  

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

如果不安装模块,则无法使用模块。你刚刚完成了半天的工作。但是,这对JSON :: XS不起作用。它之所以快,是因为它是用C语言编写的,所以你需要编译C代码。到目前为止,最简单的方法是使用提供的安装程序而不是重新发明轮子。

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

答案 1 :(得分: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.pmlocal::lib一起使用。

答案 2 :(得分: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