natatime on Xslate

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Text::Xslate;

my $tmpl = <<'...';
<table>
    [% FOR xxx IN natatime(3, elems) -%]
    <tr>
        [% FOR xx IN xxx %]<td>[% xx %]</td>[% END %]
    </tr>
    [% END -%]
</table>
...

my $xslate = Text::Xslate->new(
    function => {
        natatime => sub {
            my ($n, $ary) = @_;
            my @list = @$ary;
            my @ret;
            while (my @x = splice @list, 0, $n) {
                push @ret, \@x;
            }
            return \@ret;
        }
    },
    syntax => 'TTerse',
);
print $xslate->render_string($tmpl, {elems => [map { sprintf '%.2f', rand } 0..30]});

こんなかんじでひとつ。

Published: 2010-11-22(Mon) 02:47