I'm not sure why you don't want to use hidden form fields,
but there are some methods in CGI.pm that let you save
state to a file, then initialize a new CGI object from
that file. Perhaps this might help?
perldoc CGI
Look up "Saving the State of the Script to a File".