[Templates] Auto-increment?

Roderick A. Anderson raanders@acm.org
Tue, 12 Sep 2006 14:00:39 -0700


Thanks Josh and Paul.  Looking at these solutions I think I'll stick 
with the, [% tabidx = tabidx + 1 %] plus [% tabidx %] method I'm 
currently using.  Looking forward to TT3 and unable to take the time to 
do your solutions.


Rod
-- 
Josh Rosenbaum wrote:
> Roderick A. Anderson wrote:
> 
>> Is there a method to increment a value and have it return that value? 
>> I've been through the Badger Book but didn't quite see what I was 
>> needing though MACRO seemed close.  This is for a View for a Catalyst 
>> based application if that makes a difference.
>>
>> I'm looking to accomplish something line this.
>>
>> [% tabidx = 81 %]
>>
>> <input name="DoIt"    tabindex="[% tabidx++ %]"
>>        type="submit" />
>> <input name="TryIt"   tabindex="[% tabidx++ %]"
>>        type="submit" />
>> <input name="IGiveUp" tabindex="[% tabidx++ %]"
>>        type="reset" />
>>
>> It didn't work when I tried it.  I have ended up doing this. ( It just 
>> seems WRONG :-)
>>
>> [% tabidx = 81 %]
>>
>> <input name="DoIt"    tabindex="[% tabidx %]"
>>        type="submit" />
>> [% tabidx = tabidx + 1 %]
>> <input name="TryIt"   tabindex="[% tabidx %]"
>>        type="submit" />
>> [% tabidx = tabidx + 1 %]
>> <input name="IGiveUp" tabindex="[% tabidx %]"
>>        type="reset" />
> 
> 
> 
> Rod,
> 
> I do not believe there is a way to do this, although you could do:
> [% tabidx; tabidx = tabidx + 1 %]
> 
> Another idea might be to make tabidx a list ref, and then add a list 
> virtual method.
> 
> [% tabidx = [81] %]
> [% tabidx.inc() %] <-- will return 81 for display, and increment the 
> value to 82
> 
> $Template::Stash::LIST_OPS->{ inc } = sub {
>  my $list = shift;
>  return $list->[0]++;
> };
> 
> Might want to call that .pinc for "post increment" since you want it 
> done after the fact. A .inc() should really return an already 
> incremented value probably.
> 
> I would've suggested using a scalar here instead, but I don't think 
> scalars are passed by ref, so I don't think your value would ever be 
> updated.
> 
> -- Josh
>