in reply to CGI::Application, the cgiapp_prerun mode, and CGI object interaction

Your question is not very clear, and I think it would help a lot if you showed some code.

That having been said, when setting a parameter using, you need to know that does not override existing parameters unless you tell it to. So if 'whatever' is already a parameter, and you want to change it, you need to pass it the -override => 1 option to your call to param.

The same thing shouldn't be happening when using the CGI::Application param method (which has absolutely no relation to the param method). So since you are not seeing the parameter you set in your runmode, then I have to think it was a coding mistake on your part, or you are expecting this info to stay persistent across multiple browser requests. Since you are taking about 'previous page' and 'next page', I am guessing that your problem is with persistence.

The first thing I would check is to make sure that your cgiapp_prerun is actually being executed during the request. Have you put a print statement in there to confirm that it is running?

Failing that, try using the CGI::Application::Plugin::Session plugin which will give you a session that is persistent across requests to see if that solves your problem

use CGI::Application::Plugin::Session; sub cgiapp_prerun { my $self = shift; $self->session->param(whatever => 123); } sub my_runmode { my $self = shift; my $whatever = $self->session->param('whatever'); }