[cgiapp] Patch for cgi-app __get_body

Lyle webmaster at cosmicperl.com
Wed Mar 17 19:06:00 EDT 2010


Hi All,
  I've found myself overloading this method so that cgi-app runmodes can 
be chained objects, such as $c->obj->method();
I've updated the code* so that it shouldn't effect the way everyone is 
currently doing runmodes:-

Basically, the lines:-
    my $body;
    eval {
        $body = $is_autoload ? $self->$rmeth($rm) : $self->$rmeth();
    };

Are swapped for:-

    if(ref($rmeth) ne 'ARRAY'){
        $rmeth=[$rmeth];
    }
    my $body=$self;
    eval {
        for my $part(@$rmeth){
            $body=$body->$part($is_autoload ? $rm : ());
        }
    };


So if the runmode is passed in as an array reference then the methods 
are chained one after the other. Potentially this allows for any depth, 
so a runmode may refer to:-
$c->obj1->obj2->obj3->method(), etc, where objX are just methods that 
return objects.

Rather than just submitting a patch direct to Mark, I thought I'd post 
it here to check that this wouldn't create any problems for anyone.


Lyle

* Actually it was Peter Haworth when I was showing him my work at the 
latest Perl meet.



More information about the cgiapp mailing list