use 5.010; use Template; my $t = Template->new; my $document_template = <<'EOT'; [% FOR item IN rows.keys %] %% Item [% loop.count %] of [% loop.size %] \multirow{1}{0.85in}{\mytabhead{[% item %]}} & \mytabhead{[% rows.$item.Description %]} & [% rows.$item.Type %] \hline [% END %] EOT my $output_text = q{}; my $context = {}; $context->{rows} = \%hash; # from your original data $t->process( \$document_template, $context, \$output_text ) or die qq{Template error: }, $t->error, qq{\n}; say $output_text;