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/