Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^2: Perl Elitist Code vs Functional Code

by tobyink (Abbot)
on Aug 12, 2012 at 07:32 UTC ( #986939=note: print w/ replies, xml ) Need Help??


in reply to Re: Perl Elitist Code vs Functional Code
in thread Perl Elitist Code vs Functional Code

Don't constantly retype boilerplate code. Wrap it in reusable functions. Here's an example for your status/error messages...

package MyProject::Sugar::Catalyst; use Sub::Exporter -setup => { exports => [ error_msg => \&_build_error_message, ], groups => { default => [qw/ error_msg /], }, }; sub _build_error_message { my ($class, $name, $def) = @_; return sub { my ($c, %arg) = @_; my $uri = $arg{uri} || $def->{uri} or die "No URI supplied"; my $msg = $arg{msg} || $def->{msg} || 'Oh noes, ANOTHER FUCKING ERROR!!!'; $c->res->redirect( $c->uri_for($uri, { mid => $c->set_error_msg($msg) }) ); $c->detach(); } }

An example of usage:

package MyProject::Controller::Foobar; use MyProject::Sugar::Catalyst db_error_msg => { msg => "Database Error!" }, http_error_msg => { msg => "HTTP Error!" }, error_msg => { }; ...; sub foo_bar { ...; db_error_msg($c, uri => $uri); } sub foo_baz { ...; db_error_msg($c, uri => $uri, msg => "specific error message"); }

It makes things easier in the long run.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'


Comment on Re^2: Perl Elitist Code vs Functional Code
Select or Download Code
Re^3: Perl Elitist Code vs Functional Code
by Anonymous Monk on Aug 13, 2012 at 01:46 UTC

      Yes, closures are how Sub::Exporter works. Moose uses Sub::Exporter under the hood to export its has, extends, etc keywords. has, extends, etc are all closures. Catalyst is Moose-based. You use Catalyst; you're using closures.

      Catalyst is Plack-based. Plack is an implementation of the PSGI spec. Under PSGI all web apps are closures. You use Catalyst; you're using closures.

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://986939]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (18)
As of 2015-07-01 17:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (13 votes), past polls