以非超级用户身份安装 mod_perl(3) 我也安装了perl nbsp;5.6.1版本到 nbsp;/usr/local/lib/ nbsp;,所以当我这么做: nbsp; % nbsp;/usr/local/bin/perl5.6.1 nbsp;-V 你会看到: nbsp; @INC: /usr/local/lib/perl5/5.6.1/i586-linux /usr/local/lib/perl5/5.6.1 /usr/local/lib/site_perl/5.6.1/i586-linux /usr/local/lib/site_perl 注意这还是Linux, nbsp;但是较新的perl版本用了奔腾的处理器(所以是i586而不是i386)。这对奔腾处理器的编译优化有用,当二进制Perl扩展被创建时。 所有平台指定的文件,象已编译的C文件用XS或者SWIG去粘合Perl,应该进入类似i386-linux目录。 重点:当我们已经安装了Perl模块进入非标准目录,我们不得不让Perl知道去哪里搜索这四个目录。有两个实现方法:你可以设置PERL5LIB nbsp;环境变量或者你可以在你的脚本中修改@INC变量。 假设我们用Perl nbsp;5.00503版本,在我们的例子中目录如下: nbsp; /home/sbekman/lib/perl5/5.00503/i386-linux /home/sbekman/lib/perl5/5.00503 /home/sbekman/lib/perl5/site_perl/5.005/i386-linux /home/sbekman/lib/perl5/site_perl/5.005 就象前面提到的,你能通过perl nbsp;-V找到确切的目录并用你自己的私人目录代替全局的perl安装基目录。 修改 nbsp;@INC nbsp;是很容易的。最好的途径是用lib模块(编译指示), nbsp;通过在你的脚本最上方加入以下代码片段,这些代码需要本地化已经安装的模块: use nbsp;lib nbsp;qw(/home/stas/lib/perl5/5.00503/ /home/stas/lib/perl5/site_perl/5.005); 另一个途径是写代码显式修改@INC: nbsp; BEGIN nbsp;{ unshift nbsp;@INC, qw(/home/stas/lib/perl5/5.00503 /home/stas/lib/perl5/5.00503/i386-linux /home/stas/lib/perl5/site_perl/5.005 /home/stas/lib/perl5/site_perl/5.005/i386-linux); } 注意既然它们如果存在会自动加入(确切地说,当$dir/$archname/auto存在的时候),那么用lib模块我们不必列出一致的结构指定目录。 而且,注意到两种途径都预先考虑到@INC里被搜索的目录。这就允许你安装一个更新的模块加入你的本地库。Perl会用这个模块取代已经安装在系统库里的旧模块。 两种途径都是在编译期间修改 nbsp;@INC nbsp;的值。这个lib模块也用BEGIN块,但是是内部地。 现在,让我假设如下情景。我已经在我的本地库中安装了 nbsp;LWP nbsp;包. nbsp;现在我想安装另一个模块(例如 nbsp;mod_perl) nbsp;,这个模块有在它的首选列表中列出的 nbsp;LWP。我知道我已经安装 nbsp;LWP nbsp;,但是当我为了准备安装的模块运行perl nbsp;Makefile.pl,我被告知我没有安装LWP。 Perl没有办法知道我们有本地已经安装的模块。所有这些都在@INC里列出的目录搜索中。既然后者包含只有4个缺省目录(加上 nbsp;.目录),那么它不可能找到本地安装的 nbsp;LWP nbsp;包。我们不能通过加入代码修改@INC来解决这个问题,而要改变PERL5LIB环境变量才能解决。如果你正在用tcsh解决交互工作,那么这样做: nbsp; setenv nbsp;PERL5LIB nbsp;/home/stas/lib/perl5/5.00503: /home/stas/lib/perl5/site_perl/5.005