如何在Template toolkit中检测数组类型?

时间:2014-05-28 13:25:30

标签: perl types template-toolkit

我需要在Template toolkit中检测附件到数组类型的一些变量。 有最佳做法吗?

2 个答案:

答案 0 :(得分:3)

可以定义一个自定义虚方法,该方法返回所提供变量的ref类型。粗略的例子:

#!/usr/bin/perl
use strict;
use warnings;
use Template;
use Template::Stash;

$Template::Stash::SCALAR_OPS->{ ttref } = \&ttref;
$Template::Stash::LIST_OPS  ->{ ttref } = \&ttref;
$Template::Stash::HASH_OPS  ->{ ttref } = \&ttref;

my $t = Template->new( );

$t->process( \*DATA, { vars => [ 1, [ ], { } ] } );

sub ttref
{
    return ref $_[0];
}

__DATA__
[% FOREACH var IN vars -%]
ref type of [% var %] is [% var.ttref %]
[% END %]

输出:

ref type of 1 is 
ref type of ARRAY(0x9cfbd0) is ARRAY
ref type of HASH(0x9cfc00) is HASH

答案 1 :(得分:2)

您的数据应在控制器传递到模板之前由控制器验证。你的数据格式不应该是神秘的。

那就是说,检查这个问题最有用的方法就是测试array的大小:

[% IF var.size %]


[% END %]