Arc Forum | Using Catalyst, a Perl version might look like this: package ArcChallenge; us...

4 points by ap 6465 days ago | link | parent

Using Catalyst, a Perl version might look like this:

 package ArcChallenge;
 use strict;
 use Catalyst;
 use Catalyst::Action::REST;
 
 my @said;
 
 sub index : Action ActionClass('REST') {}
 
 sub index_GET {
 my ($self, $c) = @_;
 $c->res->body( "<form method=post><input name=said><input type=submit>" );
 }
 
 sub index_POST {
 my ($self, $c) = @_;
 my $n = push @said, $c->req->params->{said};
 $c->res->body( "<a href='/said/$n'>Click Here</a>" );
 }
 
 sub said : Regex('^said/(\d+)$') {
 my ($self, $c) = @_;
 $c->res->body( $said[ $c->req->captures->[0] - 1 ] );
 }
 
 __PACKAGE__->setup;
 
 1;
Bit clunky as yet, but work's underway to tersen up the syntax. (For anyone interested in how this will be implemented under the hood, the magic CPAN incantation is Devel::Declare. However it's a months-old work in progress so docs are minimal.) Once done it will remove most of the repeated boilerplate bits in the above code (eg. the assignments from @_ to unpack the parameters).


2 points by hobbified 6460 days ago | link

 package CatArc;
 
 use strict;
 use warnings;
 
 use Catalyst qw/Session Session::Store::FastMmap Session::State::Cookie/;
 our $VERSION = '3.14159265359';
 
 __PACKAGE__->setup;
 
 sub index : Index { } # No need to do anything
 
 sub landing : Local {
 my ( $self, $c ) = @_;
 $c->flash->{said} = $c->req->params->{said};
 }
 
 sub display : Local { } # Do nothing
 
 sub end : ActionClass('RenderView') { } # Do a magical nothing.
 
 1;
Plus templates, for crying out loud. They exist for a reason. TT used for the sake of "everyone knows it": index.tt and landing.tt are as good as static, containing just a form and a link resp. display.tt contains "You said: [% c.flash.said %]".

-----




AltStyle によって変換されたページ (->オリジナル) /