0

我无法在 CGI 中执行 HTML::Template 函数。

我正在学习在这里找到的一个简单教程:http: //metacpan.org/pod/HTML ::Template

我在我的服务器上的主路径中创建了一个新文件test.tmpl

我创建了一个名为 frt.cgi 的新文件 ...(这是这里的问题吗?应该是不同的文件扩展名吗??)

#!/usr/local/bin/perl -w
use HTML::Template;

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

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

# send the obligatory Content-Type and print the template output
print "Content-Type: text/html\n\n", $template->output;


我修改了第一行以反映我的主机为 perl 提供的程序路径。我不知道 -w 是什么我只知道我在有和没有它的情况下都试过了。我也尝试过像这样更改代码:

use warnings;
use strict;
use CGI qw(:standard);
use HTML::Template;


我已经搜索过...
https://stackoverflow.com/search?q=HTML%3A%3ATEMPLATE+&submit=search
https://stackoverflow.com/search?q=HTML%3A%3ATEMPLATE
https://stackoverflow .com/search?q=HTML%3A%3ATEMPLATE+PERL&submit=search

然而我仍然没有看到答案。我什至在 google 上搜索 .TMPL 编码,因为我认为可能需要一些特殊类型。请帮忙。

4

2 回答 2

0

如果您查看服务器日志,您可能会看到如下错误消息:

HTML::Template->new() : Cannot open included file /test.html : file not found.

您需要提供文件系统上的路径,而不是相对于生成文档的 URI。

于 2012-12-14T22:20:14.763 回答
0

首先,您可能指定了错误的路径 - 将 /test.html 更改为 test.html。此外,您的系统中可能没有 $ENV{HOME} 变量,因此将标志 die_on_bad_params 设置为 0:

my $template = HTML::Template->new(
filename => 'test.html',
die_on_bad_params => 0,
);

另外,不要忘记通过 chmod 755 将您的 Perl 文件标记为可执行文件。

选项 -w 使 Perl 启用警告,因此没有必要再写use warnings;。您可以使用模块 B::Deparse 检查 Perl 命令行选项的作用,如下所示($^W 变量禁用/启用警告):

perl -w -MO=Deparse -e "print;"

这将打印:

BEGIN { $^W = 1; }
print $_;
于 2012-12-15T00:41:39.683 回答