2013-11-01 43 views
0

因此,对于一个特定的CGI Perl脚本我已经包含了JSON像这样来处理一些以.json文件:不能包含JSON :: XS模块在本地CGI perl脚本,但可以包括JSON模块

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

这运行良好。 Web目录保存模块文件夹中所需的文件。

但是,JSON模块非常慢。我读了JSON:XS可以了,但我似乎更快不能简单地把它作为这样:

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

有一个在JSON-XS文件没有lib文件夹,我试过的组合使用(即,使用两个文件夹等),但它没有工作。

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

任何帮助表示赞赏。

+0

我试着用makefile安装。需要两个依赖关系: 'common :: sense'和'Types :: Serialiser'(Types :: Serialiser的prereq是'common :: sense')。 我安装common :: sense罚款,它通过了测试,但'Types :: Serialiser'说: **警告:先决条件common :: sense 0未找到。** – Mohammad

+0

好的使用:'perl Makefile.PL PREFIX =/path/to/modules LIB =/path/to/modules'我能够成功安装所有模块并通过'make test',但我不确定如何在脚本中实际使用它们。 – Mohammad

回答

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

2

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

如果不安装模块,则无法使用该模块。你刚刚开始做一半的工作。但是,这对JSON :: XS不起作用。它的速度很快的原因是因为它是用C写的,所以你需要编译C代码。到目前为止,最简单的方法是使用提供的安装程序,而不是重新发明轮子。

(你知道你可以安装一个模块到任意目录,而这并不需要特殊权限,对吧?)

+0

看起来我只是简单地使用JSON而没有安装它,之前工作,但它是一个坏习惯。我试图安装它,但仍然有问题,每当我使用JSON :: XS时,CGI环境会产生500错误; – Mohammad

+0

从找出造成500的错误开始。您的Web服务器应配置为将其放置在日志文件中。 – ikegami

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.pm连同local::lib

+0

感谢您的回复,我使用perl创建了makefile,然后使用make。这确实创建了所有的库。但是我仍然无法使用它。 cgi环境产生一个错误500. – Mohammad

+0

我也使用了所有依赖关系: 使用blib“./modules/common-sense-3.72”; 使用blib“./modules/Types-Serialiser-0.03”; 使用blib“./modules/JSON-XS-3.01”; 使用common :: sense; 使用Types :: Serialiser; 使用JSON :: XS; – Mohammad