Perl 使用模板工具包从列表中筛选项目

Perl 使用模板工具包从列表中筛选项目,perl,template-toolkit,Perl,Template Toolkit,如何筛选模板工具箱中动态生成的列表中的某些项? 我有一个ID列表(也是动态生成的)和一个要排除的ID列表,我只需要获取未排除的ID。最好的方法是什么?? 示例代码: [% SET ids = [1,2,4,10,11,12,13,17,19,20,21,50,51] %] [% SET id_excluded = [10,11,13,20,50] %] [% FOREACH pid IN ids %] [% IF ?code to filter the ids? %] [

如何筛选模板工具箱中动态生成的列表中的某些项? 我有一个ID列表(也是动态生成的)和一个要排除的ID列表,我只需要获取未排除的ID。最好的方法是什么?? 示例代码:

[% SET ids = [1,2,4,10,11,12,13,17,19,20,21,50,51] %]
[% SET id_excluded = [10,11,13,20,50] %]
[% FOREACH pid IN ids %]
    [% IF ?code to filter the ids? %]
        [% pid %]
    [% END %]
[% END %]

对于列表,请尝试
grep
VMethod,例如:

[% SET ids = [1,2,4,10,11,12,13,17,19,20,21,50,51] %]
[% SET id_excluded = [10,11,13,20,50] %]
[% FOREACH pid IN ids %]
    [% UNLESS id_excluded.grep("^$pid\$").size %]
        [% pid %]
    [% END %]
[% END %]
这将产生以下结果:

1 2 4 12 17 19 21 51

为什么不将过滤后的内容传递给模板呢?我现在确实在这样做,但我的第一个想法是在模板中进行过滤,在Perl中,使用智能匹配操作符(~~)很容易做到这一点,我很惊讶,在TT中,这并没有那么容易。我试图寻找答案,但在这里没有找到答案。当前版本的TT-in-general use(2.x)早于perl 5.10,当时引入了智能匹配操作符。人们通常也会在预智能匹配perl中使用grep{}构造。