This can't work:
So, where is the object supposed to come from? $html_template is, if set by the form, a string, so you're actually doing a class method call, most likely of a nonexistent package, and even if it exists, it most probably doesn't have a process method.
my $html_template = $self->param('html_template');
$html_template->process('home', ... );
So there is where it goes wrong.
I think you still have to create a new html_template object from the parameter.
You appear to be expecting the param('html_template'); to return an object but it is returning the literal string 'html_template' which is why you are getting the error that you are. The other problem with your code is that you are printing a header with the cookie straightaway whereas you actually need to be adding the the cookies to the headers you output before your main output. I really don't want to see the rest of your code, but you will need to add the cookie to a header elsewhere in your code,