in reply to Re: how to define html::template for the following hash in perl/cgi
in thread how to define html::template for the following hash in perl/cgi

Actually, the structure doesn't need to change at all, if the hash keys don't matter much (which they don't appear to). Just "cast" your hash of hashes into an array of hashes, like this:

$tmpl->param( blah => [ values %add ] );

The values piece generates a list containing the values (which are your inner hashes) inside %add; the square brackets make that list into an ARRAYref for the use of HTML::Template.

Or, if you need to preserve the key value, you could create a map:

$tmpl->param( blah => [ map { { %{$add{$_}}, 'key' => $_ } } keys %add + ] );

That's a little hairy, so let me explain: the map returns a list of HASHrefs. Each of these comes from your %add hash, and is modified with a new member called 'key' with the value of the %add hash's key for the given element. Yes, that's still confusing. Here's what the resulting data structure looks like:

$VAR1 = [ { 'req' => 'prc', 'value' => [ 'value1', 'value2', 'value3' ], 'entries' => ' ', 'name' => 'name2 ', 'type' => 'dropdown', 'default' => ' ', 'key' => 'hash2' }, { 'value' => [ '' ], 'entries' => 'M', 'name' => 'name1 ', 'type' => 'text', 'default' => ' ', 'key' => 'hash1' } ];
<-radiant.matrix->
A collection of thoughts and links from the minds of geeks
The Code that can be seen is not the true Code
"In any sufficiently large group of people, most are idiots" - Kaa's Law

Replies are listed 'Best First'.
Re^3: how to define html::template for the following hash in perl/cgi
by friedo (Prior) on Nov 04, 2005 at 16:08 UTC
    $tmpl->param( blah => [ values %add ] );

    That has the disadvantage of ending up with an unknown order of values, and my assumption (based on the hash key names) was that the OP wanted an ordered list. One could certainly do this, though:

    $tmpl->param( blah => [ map { $add{$_} } sort keys %add ] )