in reply to Using associate with HTML::Template

It looks to me like you're doing everything twice. You've got "all my form data" in %cgi_vars? Haven't you also got all your form data in your $q object? You're taking your form data out, changing it then putting in back, then putting it into the HTML::Template object?

You're doing everything three times, come to think of it.

Your form data can be accessed by using your CGI object. Your CGI object's parameters can be changed in place, and your CGI object's parameters can be inserted directly into your HTML::Template object. So why do we need this other hash? Some simple code:

#!/usr/bin/perl use CGI qw(:standard); my $q = CGI->new(); ## all your form data is now in $q use HTML::Template; my $template = HTML::Template->new( filename => '/path/to/file.tmpl' ); $q->param( -name => 'foo', -value => uc( $q->param( 'foo' ) ) ); ## change a parameter in-place $template->param( templatefoo => $q->param( 'foo' ), templatebar => $q->param( 'bar' ) ); # insert whichever form data you need into the template print $q->header(); print $template->output(); # and we're done


($_='kkvvttuubbooppuuiiffssqqffssmmiibbddllffss')
=~y~b-v~a-z~s; print

Replies are listed 'Best First'.
Re^2: Using associate with HTML::Template
by nedals (Deacon) on Apr 07, 2005 at 18:04 UTC

    I had to think about that one for a bit.
    Every so often a '$q variable' needs to be assigned to a scalar variable because it would not interpolate

    my $foo = $dbh->selectrow_array("SELECT cola FROM table WHERE id=$q->p +aram('id')"); ## This does not work. ## I could do something similar to this to solve the problem. my $cgi_vars{id} = $q->param('id'); my $foo = $dbh->selectrow_array("SELECT cola FROM tablet WHERE id=$cgi +_vars{id}");

    This happens fairly frequently. So rather than assigning each variable as needed, I simply put all the cgi variables into a hash at the cost of a little performance.

    I could put only the altered variables back in the $q object but this one liner, again at the expense of performace, seemed like an easy way to do it.

    foreach (keys %cgi_vars) { $q->param($_ => $cgi_vars{$_}); }

    This is replaced with 'associate => $q', which is the reason for all this in the first place.

    $template->param( templatefoo => $q->param( 'foo' ), templatebar => $q->param( 'bar' ) );