Html 我可以使用模板工具包找出变量是否是数组吗?

Html 我可以使用模板工具包找出变量是否是数组吗?,html,template-toolkit,Html,Template Toolkit,我正在将一个多选择框的结果传递到一个页面,以便在屏幕上显示选择。由于它是多选的,因此结果可以是标量或数组引用。有办法找到答案吗?我在网上找不到任何东西,但我想可能有一个.array或.array\u ref令牌可用于验证。 我正在使用模板工具包、Perl和Dancer 这是我得到的标量: <% IF multitext %> Text: <% multitext %> <% END %> 正文: 我想要的是 <% IF multitext

我正在将一个多选择框的结果传递到一个页面,以便在屏幕上显示选择。由于它是多选的,因此结果可以是标量或数组引用。有办法找到答案吗?我在网上找不到任何东西,但我想可能有一个
.array
.array\u ref
令牌可用于验证。 我正在使用模板工具包、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 %>

正文:
正文:
如果
返回非零值,则为arrayref

如果
返回一个非零值,则它是一个hashref

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

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

几年后

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

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

正文:

请参见

RET,您的语句“如果……返回非零值,则为arrayref”,严格来说是不正确的。它也可能是一个hashref。根据模板工具包文档,对散列(ref)使用“size”方法“返回散列中键/值对的数量”。不过,multitext.0工作得很好。很好,毛里茨,尽管问题具体是数组或标量值。我已经修改了一般情况的答案。
如果数组的第一个元素为false(或零),将返回false(或零),因此这不是一个完美的解决方案。这是真的,但是,如果您的
multitext
是一个标量数组,其中第一个元素可以是空的/零,则使用
defined
方法也很容易解决这个问题,例如:
[%-SET items=multitext.0.defined?multitext:[multitext];