Same thing bugged the hell out of me. Here's how I do it. This program takes input from a generated form and prints it to the browser.
Make sure you have CGI.pm installed
#!usr/bin/perl -w #include warning switch
#loads CGI with standard shortcuts
use CGI qw/:standard/;
#good for keeping track of variable scope, etc
use strict;
my $name = param('name') || '';
if($name) {
&page2;
} else {
&page1;
}
sub page1 {
print header;
print '<form method="post" action="thisfile.pl">';
print '<input type="text" name="name">';
print '<input type="submit" value="submit">';
print '</form>';
}
sub page2 {
print header;
print 'Hi, '.$name.', your variable has been submitted.';
}