in reply to Re^2: CHECKING IF HEADER DEFINED
in thread CHECKING IF HEADER DEFINED

It's just a way of replacing a long if/elsif/elsif/else statement with some different and equally verbose boilerplate. IMO it's pointless.

Nope, CGI::Application is a way of modularizing your code by splitting it up into screens (one sub per screen/action).

Not having to write a giant if/elsif/elsif/else to separate your screens is a huge timesaver.

Very pointy

Replies are listed 'Best First'.
Re^4: CHECKING IF HEADER DEFINED
by DrHyde (Prior) on Aug 04, 2010 at 16:18 UTC
    Working on the assumption that you would already have one sub per action (which probably calls several other subs in turn) and merely use the id/elsif/sleif/else to decide which to dispatch to, then I still fail to see what benefits CGI::Application gives you.

    From the documentation, you are expected to do this:

    sub setup { my $self = shift; $self->start_mode('mode1'); $self->mode_param('rm'); $self->run_modes( 'mode1' => 'do_stuff', 'mode2' => 'do_more_stuff', 'mode3' => 'do_something_else' ); }
    which really is just another way of writing this:
    if ($cgi{rm} eq 'mode1') { do_stuff } elsif($cgi{rm} eq 'mode2') { do_more_stuff } ...
    it's just different boilerplate.

      The $self->run_modes stuff takes care of the HTTP headers for you, which is the exact problem the OP has. So its much more useful than a large conditional where you claim it is identical.

      If you don't like configuring the runmodes in the setup method, you can just use CGI::Application::Plugin::AutoRunmode.

      Also, once you go with CGI::Application, you immediately have all of the plugins that others have shared on CPAN so you don't have to keep reinventing wheels that have already been done better by others.