[cgiapp] RFC: declarative run modes (inspired by Method::Signatures)
Rhesa Rozendaal
perl at rhesa.com
Tue Sep 23 19:21:36 EDT 2008
Hi all,
Thanks to Schwern's recent work on Method::Signatures, something clicked with
me. It looks like Devel::Declare (dangerous as it is) allows for very pretty
syntactic sugar, without relying on source filters.
Inspired by Method::Signatures, I've been hacking on something specifically
for use with cgiapp.
package My::App;
use base 'CGI::Application';
use Runmode::Declare; # proof-of-concept name
startmode hello { "Hello" }
runmode world { $self->hello . ", World!" }
Most of the time, you won't need to call setup() anymore, because this takes
care of setting the start/run modes for you.
Obviously, it checks that you only have one startmode. And it all works fine
with inheritance too.
Using signatures:
# script?rm=invite;party_id=42;names=larry;names=guido;names=matz
runmode invite($party_id, @names) {
my $party = party_from_id($party_id);
$party->add_invitees(@names);
}
# somewhere else:
$self->invite( 36, qw(me myself I) );
This pulls the named parameters from @_, or $self->query->param, or $self->param.
Rename the methods (probably silly, but it was easy and fun to try):
use Runmode::Declare runmode => 'screen', startmode => 'splash';
splash hello { "Hello" }
screen world { "World!" }
Is anyone interested in seeing this on CPAN? Or should I just keep this to
myself, and report back to the asylum? :-)
rhesa
More information about the cgiapp
mailing list