perl dancer:foreach in template只打印第一个值

ajd*_*con 0 perl template-toolkit dancer

我在Dancer中有一个非常简单的问题:我有一系列名字,我想在模板中打印每一个.这些名称来自外部源(不是数据库).但是,当我尝试对模板中的列表进行foreach时,我只得到第一个值.

码:

use Dancer;
use Template;

set 'template' => 'template_toolkit';

get '/' => sub {
    my @list = ("one","two","three");
    template 'list.tt', {
            'values' => @list,
    };
};
dance;
Run Code Online (Sandbox Code Playgroud)

和模板:

<ul>
    <%FOREACH item IN values %>
        <li><% item %></li>
    <%END%>
</ul>
Run Code Online (Sandbox Code Playgroud)

这仅输出具有单个项目"一个"的列表.我错过了什么?

Bla*_*iev 14

表达式'values' => @list扩展为包含的列表"values" "one" "two" "three",因此您应该尝试使用对数组的引用:

template 'list.tt', {
        'values' => [@list],
};
Run Code Online (Sandbox Code Playgroud)

以上仍然复制@list并返回参考.如果要获取对现有数组的引用,请使用\@list.


Can*_*ice 6

我打赌它是因为你必须将数组引用传递给'values':

template 'list.tt', {
        'values' => \@list,
};
Run Code Online (Sandbox Code Playgroud)

否则列表会扩展,你实际上正在传递:

template 'list.tt', {
        'values' => $list[0],
        $list[1] => $list[2],
};
Run Code Online (Sandbox Code Playgroud)