use HTML::Template; my $TEMPLATE = HTML::Template->new_file($path_to_template); open my $CSVIN, '<', $file; foreach (<$CSVIN>) { #split CSV into usable format #the real script has about ten variables (my $input1, $input2, $input3, $file_out) = split(/,/, $_); open my $FHOUT, '>', $file_out; $TEMPLATE->param({$var1 => $input1, $var2 => $input2, $var3 => $input3, # ... }); print $FHOUT $TEMPLATE->output(); close($FHOUT); } # end iteration through CSV