in reply to Template Toolkit, and delaying the execution of a function
I see no reason in your code to delay execution of show_elements. You can just change that sub to return a list of stuff, instead of having it output HTML items directly (which is the whole point of using templates in the fist place):
sub show_elements ($) { my $num = $_[0]; return [] unless( $num > 0 ); return [ 1..$num ]; } ... my $data = { show_elements => show_elements( $elements ), };then in the template:
<ul> {# FOREACH e = show_elements #} <li>{# e #}</li> {# END #} </ul>
If you really need to delay the sub call, have a look at the TT docs which explain it quite adequately.
In Section
Seekers of Perl Wisdom