in reply to Storing sequence of cgi states

CGI::Application seems to be like what you're looking for. This won't solve all of your problems, but the module is certainly a means to accomplish having multiple forms in one application. From the POD: "The guiding philosophy behind CGI::Application is that a web-based application can be organized into a specific set of "Run-Modes." Each Run-Mode is roughly analogous to a single screen (a form, some output, etc.). All the Run-Modes are managed by a single "Application Module" which is a Perl module. In your web server's document space there is an "Instance Script" which is called by the web server as a CGI (or an Apache::Registry script if you're using Apache + mod_perl). ". I'm thinking (having not used CGI::Application before) that this is similar to what you're trying to accomplish, and should be a valuable tool to build your app.

All in all, this method may require more code than you're willing (or is necessary) to write for the project, without knowing more about the project, I can't say. Though for storing more than one state, I'd say that using this module would be much more coherent and reusable than using hidden inputs.