Description: CGI::Application instance scripts are refreshingly brief e.g.
use My::App; my $app = My::App->new; $app->run;
But this can be abbreviated even more ...
put this in your application module - it will be executed when the module is used
sub import { __PACKAGE__->new->run }
Now your instance script looks like this
use My::App; # yes that's it!
Replies are listed 'Best First'.
Re: One line CGI::Application instance script
by diotalevi (Canon) on Apr 21, 2004 at 11:26 UTC
    That defeats the purpose of having instance scripts. At least do something with @_ during that import call. You've got to handle parameters!
      What parameters? CGI::Application needs absolutely nothing from the instance script. It's merely a boostrap. Everything comes from the CGI instance, which C::A handles as part of the run() method.

      We are the carpenters and bricklayers of the Information Age.

      Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

        I pass my configuration into the CGI::Application object. Of course, that change to operating everything during BEGIN is somewhat unusual as well. The perl interpreter running the parent's code doesn't reach INIT, CHECK or the normal runtime until the ->run call has completed. I wonder if that would cause problems for anyone or if fatal errors would interact poorly since to perl, this is all during the code-parsing stage.

        PerlMonks::Summoner -> new ( TMPL_PATH => TEMPLATEROOT . 'PerlMonks_Summoner/', PARAMS => { encryption_key => ..., url => ..., dbh => undef, change => undef, dbi_dsn => 'dbi:Pg:dbname=perlmonks', dbi_username => 'perlmonks', dbi_password => '...', }, )->run;
      At least do something with @_ during that import call.
      Like this?
      sub import { (shift)->new->run; }

      Anyway, I like the idea of removing the need for the use of an unclear idiom, and replace it with something much simpler. Liek this.

      Unfortunately, now your script will run at compile time...