my @mainloopdata = (); foreach my $main (@mains) { my %mainhash = (); $mainhash{MAIN} = $main->{MAIN}; my @subsloopdata = (); foreach my subs (@{$main->{SUBS}}) { my %subhash = (); $subhash{SUBS} = $subs; push @subsloopdata, \%subhash; } $mainhash{SUBLOOP} = \@subsloopdata; push @mainloopdata , \%mainhash; } $tpl->param(MAINLOOP => \@mainloopdata);