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



所以对于一个特定的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.pmlocal::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

最新更新