When you use the CGI.pm you can make the parameters 'sticky'
specifically you would use CGI qw(:form) (I usually use CGI qw(:standard)
here is an example of how you would use this:
#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
#you can even alter the values of hidden fields based on
#the values of other fields
if (param('foo') eq 'change') {
param('bar','a new value');
}
my $txt_textfield=textfield(-name=>'foo',
-size=>40);
my $txt_hidden=hidden(-name=>'bar',
-default=>'I do not want users to see this');
my $cmd_reset=defaults('Reset form');
my $cmd_submit=submit(-name=>'send');
print header( "text/html" );
print start_html( -title => "Sticky values in a form");
print start_form(); #defaults to method get, and action current form
print <<FORM;
$txt_textfield
<br><br>
$txt_hidden
<br><br>
$cmd_submit $cmd_reset
FORM
print end_form();
print end_html;
copy the code to your cgi-bin and call it in a browser. When you view source note the value of the hidden field. Type 'change' (without quotes) into the text field, submit it and view source again. Also note that the value of the textfield stayed the same (you can change this behavior by using
param('foo','') (those are two single quotes) after testing its value.
For more information about CGI::Form you can go here:
CPAN's CGI::Form page
John