带有严格选项的Perl模板:如何检查是否定义了变量?

时间:2017-06-03 23:23:33

标签: perl

以下代码因var.undef错误而死亡,因为未定义var。如果我将STRICT选项更改为0,但我想要严格检查,除非它在模板中进行[% IF var %]检查,否则它会起作用。我该怎么做?

use strict;
use warnings;
use Template;

my $t = Template->new(STRICT => 1) || die Template->error();
my $template = '[% IF var %][% var %][% END%]';
my $output = '';
$t->process(\$template, {}, \$output) || die $t->error(), "\n";
print "$output\n";

1 个答案:

答案 0 :(得分:4)

您发送的空哈希引用不包含您要求模板显示的var变量。

您可以签入Perl代码来设置一个合理的默认设置(在本例中,我只是将其硬编码到process()的调用中):

$t->process(\$template, {var => 55}, $output) || die $t->error(), "\n";

输出:

55

...或者,如果var变量未在途中发送(即未定义),则可以告诉模板设置自己的默认默认值:

my $template = '[% DEFAULT var = "sane" %][% IF var %][% var %][% END%]';

输出:

sane