Das schliesst sich doch nicht aus?
Etwas Controller code:
my $w = HTML::Widget->new('widget')->method('get')->action('/');
# Add some elements
$w->element( 'Textfield', 'name' )->label('Name')->size(60);
$w->element( 'Submit', 'ok' )->value('OK');
# Catalyst specific
$c->stash->{widget} = $w;
Template code:
<html>
...yadayada...
[% widget %]
...yadayada...
</html>
Und das ergebnis:
<html>
...yadayada...
<form action="/" id="widget" method="post">
<fieldset>
<label for="widget_name" id="widget_name_label">
Name
<input id="widget_name" name="name" size="60" type="text"
value="sri" class="Textfield" />
</label>
<input id="widget_ok" name="ok" type="submit" value="OK" />
</fieldset>
</form>
...yadayada...
</html>
Wie viel einfacher und eleganter geht es denn noch? :)