Веб-разработка PERL: модуль Perl не найден, но установлен - PullRequest
2 голосов
/ 14 февраля 2012

Я инсталлировал модуль Perl HTML :: Template через cpan.Сам Perl распознает модуль Template, но когда я пытаюсь использовать его как CGI-скрипт 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: "

[...]

Правильно ли он установлен?Если я наберу: $ perl -e "использовать HTML :: Template" ошибка не возвращается

Я использую Fedora 16

версия Linux 3.2.5-3.fc16.i686 (mockbuild@x86-06.phx2.fedoraproject.org) (версия gcc 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC)) # 1 SMP Чт 9 февраля 02:24:08UTC 2012

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

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

В вашей строке 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 - установить local :: lib вашего дистрибутива (например, в Debian / Ubuntu, apt-get install liblocal-lib-perl), а затем использовать его для настройки собственной библиотеки CPAN.(Вы можете загрузить локальную :: lib из CPAN, но это проще сделать с помощью пакета distro.)

0 голосов
/ 10 декабря 2013

Я встретил ту же проблему и обнаружил, что она вызвана путем perl.Вам нужно проверить свой путь perl:


which perl

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


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