in reply to DBI and HTML::Template

Here's how I did it (assuming I pasted the relevant stuff correctly :).
$tmpl->param('loop' => db_get_loop()); sub db_get_loop { my ($dbh, $sql, $sth, @loop_info, $limit, $last_update, $city, $zipcode, $name, $low, $high, $date, $forecast, $forecast_description); $dbh = db_connect(); $sql = qq{SELECT last_update,city,zipcode,name,low,high, date,forecast,forecast_description FROM $TABLE ORDER BY last_update DESC, date LIMIT $limit}; $sth = $dbh->prepare($sql); $sth->execute(); $sth->bind_columns(\($last_update, $city, $zipcode, $name, $low, $high, $date, $forecast, $forecast_descri +ption)); while ($sth->fetchrow_arrayref()) { my (%loop); # Set TMPL_VARs for each iteration # in the <TMPL_LOOP NAME="${region}_headlines_loop"> l +oop $loop{'last_update'} = $last_update; $loop{'city'} = $city; $loop{'zipcode'} = $zipcode; $loop{'name'} = $name; $loop{'low'} = $low; $loop{'high'} = $high; $loop{'date'} = $date; $loop{'forecast'} = sprintf('%02d', $forecast); $loop{'forecast_description'} = $forecast_description; # Push this row onto loop push @loop_info, \%loop; } $sth->finish(); $dbh->disconnect(); return \@loop_info; }

You could put all those variables in a hash, instead. That's just how I happened to do it.