Как я могу загрузить модуль Perl во время выполнения? - PullRequest
9 голосов
/ 19 февраля 2010

Я хотел бы использовать модуль HTML :: Template.Однако он не установлен на сервере, который я использую для разработки сценариев CGI.

Возможно ли загрузить модуль во время выполнения: я обнаружил файл Template.pm в локальной установке Perl и загрузил файлна сервер я использую.

#!/usr/bin/perl -w

use CGI qw(:standard :html4);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);

# use HTML::Template;

use Template;

# my $package = "HTML::Template";
# eval {
# (my $pkg = $package) =~ s|::|/|g; # require need a path
# require "$pkg.pm";
# import $package;
# };
# die $@ if( $@ );

# open the HTML template
my $template = HTML::Template->new(filename => 'test.tmpl');

# fill in some parameters in the template
$template->param(home => $ENV{HOME});
$template->param(path => $ENV{PATH});

# send the obligatory Content-Type
print "Content-Type: text/html\n\n";

# print the template
print $template->output;

Ответы [ 5 ]

11 голосов
/ 19 февраля 2010

Вот что я делаю:

cgi-bin/script.pl
     cgi-bin/lib/HTML/Template.pm

В script.pl (если вы не используете mod_perl):

 use FindBin qw( $Bin );
 use File::Spec::Functions qw( catfile );
 use lib catfile $Bin, 'lib';
 use HTML::Template;

 # The rest of your script

Если HTML :: Template действительно необязательно, читайте perldoc -f require .

См. Также Как мне сохранить каталог моего собственного модуля / библиотеки? и Разница между потребностью и использованием? в perlfaq8 .

9 голосов
/ 19 февраля 2010

Это похоже на ответ Синан, но использует local :: lib :

Настройте ваши файлы как:

cgi-bin/script.pl
cgi-bin/lib/HTML/Template.pm

А в вашем скрипте:

use strict;
use warnings;
use local::lib 'lib';
use HTML::Parser;

Преимущество local :: lib в том, что вы можете устанавливать модули из CPAN прямо в каталог по вашему выбору:

perl -MCPAN -Mlocal::lib=lib -e 'CPAN::install("HTML::Parser")'
4 голосов
/ 19 февраля 2010

HTML :: Template и Template - это разные модули Perl.Если вы хотите использовать HTML :: Template, вам потребуется use HTML::Template; в верхней части скрипта для импорта этого пакета.

Убедитесь, что вы скопировали файл HTML / Template.pm с локального компьютерасервер, а не Template.pm.

1 голос
/ 15 октября 2012

Я должен был добавить это как опцию, так как я один из сопровождающих этого модуля: App :: FatPacker может использоваться для включения стороннего модуля в ваше приложение, когда оно поставляется , поэтому его не нужно устанавливать отдельно в среде развертывания.

0 голосов
/ 19 февраля 2010

Да, это так. Посмотрите на Module :: Runtime . Я бы установил ваш HTML-модуль, даже в локальной директории установки. Это, вероятно, меньше хлопот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...