我正在关注Perl 的 HTML::Template 模块上的本教程。这是模板:
<!--template2.tmpl-->
<html>
<body>
<table>
<tr>
<th>Language</th>
<th>Description</th>
</tr>
<tmpl_loop name="language">
<tr>
<td><tmpl_var name="language_name"></td>
<td><tmpl_var name="description"></td>
</tr>
</tmpl_loop>
</table>
</body>
</html>
这是 CGI 测试程序:
#!"C:\Strawberry\perl\bin\perl.exe" -wT
use CGI qw(:all);
use CGI::Carp qw(fatalsToBrowser);
use HTML::Template;
my @rows = (
{
language_name => 'C#',
description => 'Created by Microsoft'
},
{
language_name => 'PHP',
description => 'Hypertext Preprocessor'
},
{
language_name => 'Haskell',
description => 'Functional language'
},
);
print header;
my $template=HTML::Template->new(filename=>'template2.tmpl');
$template->param(language => @rows);
print $template->output();
这失败并出现以下错误:HTML::Template::param() : attempt to set parameter 'language' with a scalar - parameter is not a TMPL_VAR!
但是,当我将 @rows 的定义从使用括号更改为使用方括号(从my @rows=(...)
to my @rows = [...]
)时,代码可以正常工作;它显示一个包含数据的表格。
正如我通过阅读这篇文章所了解的,第一种形式是从列表中定义的数组,第二种形式是对匿名数组的引用。我仍然不清楚为什么第一种形式不起作用。感谢您为我澄清这一点。