[Templates] Lists and rand like http://faq.perl.org/perlfaq4.html#How_do_I_select_a_ra
Mark Mills
extremely@hostile.org
Wed, 19 Jul 2006 01:34:44 -0400
>> package Template::VMethod::Rand;
>>
>> use base qw(Template::Plugin);
>> use strict;
>>
>> sub load {
>> my ( $class, $context ) = @_;
>> # Set this twice to avoid a "used only once" warning
>> $Template::Stash::LIST_OPS->{rand} = \&randomizer;
>> $Template::Stash::LIST_OPS->{rand} = \&randomizer;
>>
> Just do it once with
>
> {
> no warnings;
> $Template::Stash::LIST_OPS->{rand} = \&randomizer;
> }
>
>> return $class;
>> }
>>
>> sub randomizer
>> { return $_[0][int(rand($#{$_[0]}+1))]; }
>> { my $arr = shift; return $arr->[rand @$arr] }
>>
>> [] already forces int, and scalar is much neater than $# + 1
>>
If you're going to neaten $#+1 away, why change to creating a named
variable you don't need? Or a named sub?
$Template::Stash::LIST_OPS->{rand} = sub{return $_[0][rand@{$_[0]}]};