我可以使用Template Toolkit找出变量是否是一个数组?

时间:2013-04-11 15:32:55

标签: html template-toolkit

我将多选框的结果传递给页面,以便可以在屏幕上显示选择。由于它是多选的,结果可以是标量或数组引用。有没有办法找到这个?我在网上找不到任何内容,但我认为可能有.array.array_ref令牌可用于验证。 我正在使用Template Toolkit,Perl和Dancer。

所以这就是我得到的一个标量:

<% IF multitext %>
    Text: <% multitext %>
<% END %>

我想要的是像......

<% IF multitext %>
    <% IF multitext.array_ref %> <!-- whatever works! -->
        <% FOREACH text IN multitext %>
            Text: <% text %>
        <% END %>
    <% ELSE %>
        Text: <% multitext %>
    <% END %>
<% END %>

2 个答案:

答案 0 :(得分:7)

如果<%- multitext.0 -%>返回非零值,则为arrayref。

如果<%- multitext.keys.size -%>返回非零值,则为hashref。

我通常处理它的方法是强制它成为一个数组,如果它是一个标量,例如:

<%- SET items = multitext.0 ? multitext : [ multitext ];
    FOREACH item IN items;
        ...
    END; -%>

答案 1 :(得分:0)

几年后...

您可以使用 .list vmethod 来保证它是一个数组,例如

    <% FOREACH text IN multitext.list %>
        Text: <% text %>
    <% END %>

http://template-toolkit.org/docs/manual/VMethods.html#section_list