http://www.perlmonks.org?node_id=500631


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 CGI.pm, you need to know that CGI.pm does not override existing parameters unless you tell it to. So if 'whatever' is already a parameter, and you want CGI.pm 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 CGI.pm 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'); }