use Template; my ($n1, $n2) = @ARGV; Template->new->process(\*DATA, { n1 => $n1, n2 => $n2 }) or die Template->error; __END__ [% FOR i1 = [1 .. n1] -%] Section [% i1 %] [% FOR i2 = [1 .. n2] -%] Subsection [% i2 %] [% END -%] [% END -%]