我通过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
感谢您的帮助。
答案 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