my %hash = ( 'Perl Monks' => 'www.perlmonks.org', 'Gossip and Innuendo' => 'www.salon.com', 'Free Software' => 'www.gnu.org' ); # we need parallel lists for each of the variables my @label_list; my @url_list; foreach my $label ( keys %hash ) { push( @label_list, $label ); push( @url_list, $hash{$label} ); } my @loop_data = (); while (@label_list) { my %row_data = {}; $row_data{'LABEL'} = shift @label_list; $row_data{'URL'} = shift @url_list; push( @loop_data, \%row_data ); } $template->param(THIS_LOOP => \@loop_data); ========== then in the template: Hotlink: ">