Demo of passing a "dynamic variable" to a template".
#!/usr/bin/perl
use strict;
use warnings;
use Template;
my $tt = Template->new;
$tt->process(\*DATA, { rand => sub { rand } })
or die $tt->error;
__END__
A Random number: [% rand %]
A more complex example where the dynamic variable works on a list.
#!/usr/bin/perl
use strict;
use warnings;
use Template;
use List::Util 'shuffle';
my $tt = Template->new;
my @a = (1 .. 10);
$tt->process(\*DATA, { shuffle => sub { shuffle @{$_[0]} },
arr => \@a })
or die $tt->error;
__END__
[% arr.join(':') %]
[% shuffle(arr).join(':') %]
The last example reworked to use a custom vmethod.
#!/usr/bin/perl
use strict;
use warnings;
use Template;
use List::Util 'shuffle';
no warnings 'once'; # turn off annoying error
$Template::Stash::LIST_OPS->{ shuffle } = sub {
my $list = shift;
return [ shuffle @$list ];
};
my $tt = Template->new;
my @a = (1 .. 10);
$tt->process(\*DATA, { arr => \@a })
or die $tt->error;
__END__
[% arr.join(':') %]
[% arr.shuffle.join(':') %]
|