[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]}]};