use Data::Dumper; use CGI qw|:standard|; use HTML::Template; # the fruit data - the keys are the fruit names and the values are # pairs of color and shape contained in anonymous arrays my @loop; my %fruit_data = ( Apple => ['Red, Green or Yellow', 'Round'], Orange => ['Orange', 'Round'], Pear => ['Green or Red', 'Pear-Shaped'], Banana => ['Yellow', 'Curved'], ); print header(); my $tmplObj = HTML::Template->new(filename=>'..\..\tmpl\fruit.tmpl'); for(keys %fruit_data){ push @loop, {name=>$_, color=>$fruit_data{$_}->[0], shape=>$fruit_data{$_}->[1] }; } my $whatIamReallyPassing = { fruit_loop => \@loop }; warn Dumper $whatIamReallyPassing; $tmplObj->param($whatIamReallyPassing); print $tmplObj->output;