Thanks Frank for this nice explanation. Somehow i never knew that function calls do not go up the itheritance chain. You never know what you will pick up from themse mailing lists.
On 9/16/05, Frank Carnovale <[EMAIL PROTECTED]> wrote: > Guys, > > Here's my take on why that "naughty" code is there. > In short: > > It is because prior to the first request, no "handler" routine is there yet, > and when the first request is handled, it's not passed as an OO-style call > but as a plain old subroutine call, so no inheritance technique was going to > find a "handler" out of somewhere else. > > Example: > > One of our Maypole apps is ITSRR::Prism. > > <Location /prism > > SetHandler perl-script > PerlResponseHandler ITSRR::Prism > </Location> > > Life-cycle of first ever request: > > In a just-in-time fashion, ModPerl finds that ITSRR::Prism is not already in > its namespace so it gets automatically 'required' prior handling the first > request. > During the require, the module-level code calls Maypole::setup (via its > inheritance chain) which as we know uses the "naughty" technique to add a > handler entry into the ITSRR::Prism namespace. > Once the require is finished, modperl is finally ready to get this pending > first-ever request dealt with. It calls something like this: > ITSRR::Prism::handler($r) where the $r is an Apache::Request object (note not > a Maypole request!). That call is not an OO-style call.. it's just a call to > a sub out of that package. Therefore no rules about following inheritance > chains to find the method "handler" are going to be applied. So if the > naughty bit is not done, no handler is available to service the request. > > If modperl had invoked ITSRR::Prism->handler($r) .. note the arrow technique > in other words a "method" call.. then I suppose the naughty technique would > be unnecessary. I note that modperl does support exactly this if you want, > see http://perl.apache.org/docs/2.0/user/coding/coding.html#Method_Handlers . > But I get the impression from the modperl 1&2 docs that this is unchartered > waters (by me anyway), and requires a special build of modperl. > > > > >>> Peter Speltz <[EMAIL PROTECTED]> 16/09/05 1:57 PM >>> > On 9/15/05, David Baird <[EMAIL PROTECTED]> wrote: > > Maypole::setup() has this: > > > > # Naughty. > > *{ $calling_class . "::handler" } = > > sub { Maypole::handler( $calling_class, @_ ) }; > > > > Why is this necessary? $calling_class is the application, which > > already inherits from Maypole. > > > > At first I was going to say to safeguard users from messing things up > by defining a handler sub. But it looks like it is so the $r object > in @_ is passed is available and not just the class. I commented it > out and the request could not run. It is really beyond my > understanding now and i could be totally wrong. I am curious though. > > > ------------------------------------------------------- > SF.Net email is sponsored by: > Tame your development challenges with Apache's Geronimo App Server. Download > it for free - -and be entered to win a 42" plasma tv or your very own > Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php > _______________________________________________ > Maypole-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/maypole-devel > > > > This message (including any attachments) is intended solely for the addressee > named and may contain confidential and privileged information. If you are not > the intended recipient, please delete it and notify the sender. > Views expressed in this message are those of the individual sender, and are > not necessarily the views of the Independent Transport Safety and Reliability > Regulator (ITSRR). Whole or parts of this e-mail may be subject to copyright > of ITSRR or third parties. You should only re-transmit, distribute or use the > material for commercial purposes if you are authorised to do so. > > Visit us at: > > www.transportregulator.nsw.gov.au or Telephone: (02) 8263 7100 > > > -- pjs ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ Maypole-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/maypole-devel
