2012-02-14 3 views
2

Я включил модуль Perl HTML :: Template через cpan. Сам Perl распознает модуль Template, но когда я пытаюсь использовать как сценарий Perl CGI, это вызывает ошибку последующей:PERL Веб-разработка: модуль Perl не найден, но установлен

$ 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: " 

[...] 

Это он правильно installe? Если я типа: $ Perl -e "Использование HTML :: Template" не ошибка возврата

Im'using Fedora 16

Linux version 3.2.5-3.fc16.i686 ([email protected]) (gcc version 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC)) #1 SMP Thu Feb 9 02:24:08 UTC 2012

Спасибо за помощь.

ответ

4

У вашей use lib линии есть дополнительные j.

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

поэтому путь не соответствует тому, что вы сказали позже («установлен модуль, расположенный в: /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 среды переменную (которую вы можете установить из файла запуска вашей оболочки (например, ~/.bash_profile)) или используя perl -I....

Также, если вы хотите использовать CPAN, вы можете посмотреть модуль local::lib. Один из удобных способов использования local :: lib - установить локальную локальную дистрибутивную библиотеку (например, в Debian/Ubuntu, apt-get install liblocal-lib-perl), а затем использовать ее для настройки собственной частной библиотеки CPAN. (Вы может bootstrap local :: lib от CPAN, но это проще сделать с помощью дистрибутива.)

0

Я встретил ту же проблему, и я нашел ее вызванной дорогой perl. Вам необходимо проверить свой perl-путь:


which perl 

Убедитесь, что положили его в первую очередь! Например, я установил шаблон HTML: Template с терминалом на своем Mac, и мой perl использует: /opt/local/bin/perl. Сценарий должен быть:


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