in reply to HTML::Template : How to separate code and html with lesser maintenance issues

You could choose to create 3 different templates for select, continue or denied.
my $tmpl = ""; my $item = "CONTINUE"; if ($item eq "SELECT") { $tmpl = "select.tmpl"; } elsif ($item eq "CONTINUE") { $tmpl = "continue.tmpl"; } elsif ($item eq "DENIED"){ $tmpl = "denied.tmpl"; } my $template = HTML::Template->new( filename => $tmpl );
So no ifs are needed in your template (i try to put as less logic as possible in my templates as i can)
Do you want (simple) logic? Try HTML::Template::Expr.

However, you may wonder if you need it. Another nice trick you can do with HTML::Template; call a perl function by using parameters, so you don't even need to register a function like in HTML::Template::Expr.
# template.tmpl <TMPL_VAR NAME="function_xyz"> # Perl: my $tmpl = HTML::Template->new( filename => 'template.tmpl' ); my @all_params = $tmpl->param(); foreach (@all_params) { if ($_ =~ /^function_/i) { my ($a,$b) = split (/_/,$_,2); $tmpl->param($_ => $b() ); } } sub xyz { return "template value needed"; }

"We all agree on the necessity of compromise. We just can't agree on when it's necessary to compromise." - Larry Wall.