PERL Web开发:未找到Perl模块,但已安装

时间:2012-02-14 11:13:13

标签: perl templates module cgi

我通过cpan对Perl模块HTML :: Template进行了调试。 Perl本身识别模板模块,但是当我尝试用作Perl CGI脚本时,它会触发跟随错误:

$ cat /var/log/httpd/error_log

[Tue Feb 14 11:28:27 2012] [error] [client 127.0.0.1] Can't locate HTML/Template.pm in @INC (@INC contains: /root/perl5/lib/perjl5/ /usr/local/lib/perl5 /usr/$
[Tue Feb 14 11:28:27 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at /var/www/cgi-bin/index.pl line 4.
[Tue Feb 14 11:28:27 2012] [error] [client 127.0.0.1] Premature end of script headers: index.pl

我的Perl脚本(index.pl)如下:

#!/usr/bin/perl -w

use lib "/root/perl5/lib/perjl5"; # is it the correct way to include libs?
use HTML::Template; # error line


print "Content-type: text/html\r\n\r\n";
print "Hello there!<br />\nJust testing .<br />\n";

for ($i=0; $i<10; $i++)
{
print $i."<br />"; 
}

如果我加载脚本 http://localhost/cgi-bin/index.pl ,则会返回500内部服务器错误。

该模块已安装并位于:/root/perl5/lib/perl5/HTML/Template.pm

Infact $ perldoc perllocal 返回:

[...]
   [1mMon Feb 13 16:43:34 2012: "Module" HTML::Template[0m
       ·   "installed into: /root/perl5/lib/perl5"

       ·   "LINKTYPE: dynamic"

       ·   "VERSION: 2.6"

       ·   "EXE_FILES: "

[...]

它是否正确安装? 如果我输入: $ perl -e“使用HTML :: Template”没有错误返回

我正在使用Fedora 16

  

Linux版本3.2.5-3.fc16.i686   (mockbuild@x86-06.phx2.fedoraproject.org)(gcc版本4.6.2 20111027   (红帽4.6.2-1)(GCC))#1 SMP Thu 2月9日02:24:08 UTC 2012

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

您的use lib行有一个额外的j

use lib "/root/perl5/lib/perjl5";
#                           ^

因此路径与您稍后所说的不符(&#34;模块已安装并位于:/root/perl5/lib/perl5/HTML/Template.pm")。

诊断此方法的方法是从错误消息/root/perl5/lib/perjl5复制并粘贴目录,然后附加模块的文件名HTML/Template.pm以提供/root/perl5/lib/perjl5/HTML/Template.pm,然后看那里看文件是否存在。

然后您会看到该文件不存在,然后可以继续查明目录名称中是否存在拼写错误。

此外,如果您正在维护自己的(CPAN)库,而不是将use lib ...放入所有源文件中,您可能需要考虑使用其他机制来获取perl以使用您的库,示例设置PERL5LIB环境变量(可以从shell的启动文件中设置(例如〜/ .bash_profile)),或使用perl -I...

此外,如果您想使用CPAN,您可能需要查看local::lib模块。使用local :: lib的一种方便方法是安装你的发行版本地:: lib(例如在Debian / Ubuntu下,apt-get install liblocal-lib-perl),然后使用它来设置你自己的私有CPAN库。 (你可以从CPAN引导local :: lib,但使用发行版包更容易。)

答案 1 :(得分:0)

我遇到了同样的问题,我发现它是由perl的路径引起的。你需要检查你的perl路径:


which perl

确保把它放在第一行! 例如,我在我的Mac上安装了带有终端的HTML:Template,我的perl使用:/opt/local/bin/perl。该脚本应该是:


#!/opt/local/bin/perl -wT

答案 2 :(得分:-1)

#!/usr/bin/perl -w
print "Content-type:text\html\n\n"; # -> before use lib

use lib "/root/perl5/lib/perjl5"; # is it the correct way to include libs?
use HTML::Template; # error line   

print "Hello there!<br />\nJust testing .<br />\n";

for ($i=0; $i<10; $i++)
{
print $i."<br />"; 
}

如果您在文件夹 /root/perl5/lib/perjl5 上的模块中打印 html,则在顶部内容类型上打印。 2 文件夹中的替代单独模块。首先使用lib模块不打印html