Unless you can wave a magic wand and change the way HTTP works, no. You have to just make do. Here's an idea of what you might do, though:
use CGI;
my $q = CGI->new();
print $q->header();
if ($q->param('question'))
{
print finished_form();
}
else
{
print ask_question_form();
}
You could test for more than one parameter, plus check if they are valid. The two functions, of course, display HTML, presumably populated with various bits of data, or HTML form elements.
The output of
ask_question_form is an HTML page with the
ACTION of the form set to be the same page. Which is to say that it's unset. Your script displays the HTML form, and displays the processed result. This can be extended to make multi-part forms quite simply, where the results are carried forward from one form to the next.
This is, of course, an extremely trivial example, but most handlers, while much more complicated, are fundamentally the same in concept.