On Mon, Jun 18, 2007 at 01:27:07PM -0700, Quinn Weaver wrote:
> On Mon Jun 18 20:04:09 GMT 2007, Matt Trout wrote:
> On Mon, Jun 18, 2007 at 11:50:06AM -0700, Quinn Weaver wrote:
> 
> > Hi, all,
> > 
> > During some debugging, I noticed that MyApp::setup is called twice.
> > This looks like an intentional feature.  My question is, why?
> > 
> > From MyApp.pm:
> > 
> >    my $ret = $self->SUPER::setup( @_ );
> > 
> > From Catalyst.pm:  
> > 
> >     # Call plugins setup
> >     {
> >         no warnings qw/redefine/;
> >         local *setup = sub { };
> >         $class->setup;
> >     }
> > 
> > Yep, the latter code locally redefines the parent class setup to a
> > no-op in order to prevent an infinite loop, then calls the child class
> > (MyApp) setup.  The effect is that every line in MyApp::setup is
> > executed twice.
> 
> > No it isn't. The redefine means it -isn't- called a second time.
> 
> Yes it is.  You can verify this by running myapp_server.pl under the debugger,
> or by putting lines like this in MyApp::setup:
> 
>     warn "setup called by process $$ at ", scalar localtime();

Sorry, I read Catalyst::setup for MyApp::setup - I never have direct
setup code in my app class, since I tend to handle everything I can
via model/view/controller components rather than turning MyApp into a god
object (not to say you are, but that's my motivation ...)

I'd be fairly willing to say this is a bug and it should be doing

{
  no strict 'refs';
  no warnings 'redefine';
  local *{"${appclass}::setup"} = sub { shift->NEXT::setup(@_); };
  local *setup = sub {};
  $app->setup;
}

Maybe somebody could put together a test case for this behaviour?
 
-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director    Want a managed development or deployment platform?
 Shadowcat Systems Ltd.  Contact mst (at) shadowcatsystems.co.uk for a quote
http://chainsawblues.vox.com/             http://www.shadowcatsystems.co.uk/ 

_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/

Reply via email to