Perl综合典藏网(Comprehensive Perl Archive Network, CPAN)
perl的模块有2种来源
可以在CPAN Search网站或MetaCPAN网站上搜索那些没有随perl发布的模块
在开始寻找模块前,先检查本地是否已经安装该模块
$ perldoc Digest::SHA
如果查看未安装的模块,会看到错误提示
$ perldoc Llamas
No documents found for "Llamas".
用perl提供的cpan命令也可以获取指定模块的详细信息
$ cpan -D Digest::SHA
想要安装系统上没有的模块,一般需要先下载打包发布的模块文件包,解压缩后在shell中运行一系列编译安装命令。具体步骤和注意事项可以查阅模块包中的README或INSTALL文件
如果模块使用Perl自带的ExtUtils::MakeMaker封装打包,可以用下面的流程安装
$ perl Makefile.PL
$ make install
如果没有权限安装模块到系统全局目录,可以在Makefile.PL后面加上INSTALL_BASE参数,指定以用户身份可写的安装目录
$ perl Makefile.PL INSTALL_BASE=/Users/fred/lib
有些perl模块开发者要求用另1个模块Module::Build来编译并安装他们的包,流程如下
$ perl Build.PL
$ ./Build install
$ perl Build.PL --install_base=/Users/fred/lib
有些模块的工作依赖于其它模块,所以必须预先安装好前置模块,才能继续编译安装
$ perl -MCPAN -e shell # 使用perl自带的CPAN.pm
$ cpan Module::CoreList LWP CGI::Prototype
$ cpanm DBI WWW::Mechanize # cpanm:cpanminus
C:\ ppm Time::Moment
CPAN工具默认会把模块安装到与perl解释器相同的目录,但是我们经常没有这个目录的写权限
最容易的解决方法时用local::lib模块安装新模块到自己的用户目录下
local::lib模块会自动修改某些环境变量,从而修改CPAN客户端安装模块的位置
$ perl -Mlocal::lib
export PERL_LOCAL_LIB_ROOT="/Users/fred/perl5";
export PERL_MB_OPT="--install_base /Users/fred/perl5";
export PERL_MM_OPT="INSTALL_BASE=/Users/fred/perl5";
export PER5LIB="...";
export PATH="/Users/fred/perl5/bin:$PATH";
如果在cpan客户端使用-I
选项,就会参照上面列出的环境变量安装指定的模块
$ cpan -I Set::CrossProduct
而cpanm好像更聪明一点。如果已经设置了那些local::lib会帮助设置的环境变量的话,cpanm会直接按照这些设定安装。如果没有,cpanm会检查默认的安装路径是否拥有可写权限,如果没有写权限,cpanm会自动帮忙加载local::lib模块
也可以直接配置CPAN客户端,这样以后就一直安装到指定目录。可以在CPAN.pm配置文件中设定以下参数,以后使用CPAN.pm shell的时候就会自动安装新模块到指定的私有目录。
为了兼容,需要配置2个设定,1个给ExtUils::Makemaker用,1个给Module::Build用
$ cpan
cpan> o conf makepl_arg INSTALL_BASE=/Users/fred/perl5
cpan> o conf mbuild_arg "--install_base /Users/fred/perl5"
cpan> o conf commit
需要注意的是,这里设定的是和local::lib给出的相同目录。在CPAN.pm配置文件中加上这些内容后,每次安装模块都会自动附加这些安装参数。
在选定安装perl模块的路径后,还要告诉应用程序要在哪能找到这些模块文件
# 在perl程序内部
use local::lib;
use lib qw( /Users/fred/perl5 );