如何在运行时加载Perl模块?

时间:2010-02-18 23:12:44

标签: perl installation module

我想使用HTML :: Template模块。但是,它没有安装在我用来开发CGI脚本的服务器上。

是否可以在运行时加载模块:我在本地Perl安装上找到了Template.pm文件,并将文件上传到我正在使用的服务器。

#!/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 个答案:

答案 0 :(得分:11)

以下是我的工作:

     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

另请参阅How do I keep my own module/library directory?中的What's the difference between require and use?perlfaq8

答案 1 :(得分:9)

这与Sinan的答案类似,但使用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")'

答案 2 :(得分:4)

HTML::TemplateTemplate是不同的Perl模块。如果您想使用HTML :: Template,则需要在脚本顶部use HTML::Template;导入该包。

确保将HTML / Template.pm文件从本地计算机复制到服务器,而不是Template.pm。

答案 3 :(得分:1)

我应该添加这个作为选项,因为我是这个模块的维护者之一:App::FatPacker可以用来在你的应用程序发布时包含第三方模块,所以它不会需要在部署环境中单独安装。

答案 4 :(得分:0)

是的。看看Module::Runtime。我会安装你的HTML模块,即使在本地安装目录中也是如此。这可能不那么麻烦了。