flamey has asked for the wisdom of the Perl Monks concerning the following question:

This is a first time I'm trying to use CGI::Application (or any other framework for web development for that matter). I have a form with a few fields and a submit btn And I'm trying to get parameters form that form after the submit. From various examples and the documentation, it looks like I should be able to just do
my ($self) = @_; ... my $subj = $self->param('subject'); # a my @all_params = $self->param(); # b
but both A and B return nothing (empty). I did Dumper(\$self) and I can see all the parameters and values are there. What can be the issue?

Replies are listed 'Best First'.
Re: CGI::Application, $self->param() doesn't return
by derby (Abbot) on Sep 14, 2009 at 13:06 UTC

    The param method from CGI::Application does not return CGI parameters but properties of the instance. What you need to do is get the query object first and then get the CGI parameters from that:

    my $self = shift; my $cgi = $self->query(); my $subj = $cgi->param( 'subject' );

    -derby
      Thanks, that was it!
Re: CGI::Application, $self->param() doesn't return
by leocharre (Priest) on Sep 14, 2009 at 14:00 UTC

    As derby suggested, the param() method of CGI::Application is not what you think it is.

    The param() method ... Let's say it was designed with order and organization in mind. So where in other oo type modules you may have object params in $object->{property_x} or $object->property_x, in CGI::Application objects you would hav e this in $object->param('property_x').
    (This used to be annoying to me. But.. hold on, it'll make sense later on. I suggest you trust it.)

    So, if you want a param as we think of it, as from a form submitted, etc..
    Instead of the usual cgi script..

    my $cgi = new CGI; $cgi->param('name');

    You can just..

    $cgiapp->query->param('name');

    This is good. Because for example with CGI::Application::Plugin::Session.. you have..

    $cgiapp->session->param('name');

    and so.. if this were also in the cgi app instance (the object..)

    $cgiapp->param('name');

    This is cool later on as code gets hairy.. it provides some consistency.

      yeah, i have much to learn :) thanks for extended reply!
Re: CGI::Application, $self->param() doesn't return
by Anonymous Monk on Sep 14, 2009 at 12:04 UTC
    try
    $self->dump(); $self->dump_html();