On Fri, Feb 24, 2012 at 7:36 AM, Bill Moseley <mose...@hank.org> wrote: > On Fri, Feb 24, 2012 at 6:59 PM, Chris Prather <ch...@prather.org> wrote: > >> Throwable::Error composes leads to: >> >> >> https://metacpan.org/source/RJBS/Throwable-0.102080/lib/StackTrace/Auto.pm#L71 >> >> In which we find 'around new => { ... }'. Which is exactly the method >> modifier that Moose is warning about. >> > > Thanks Chris. Is the solution to not make_immutable all the classes that > inherit from Throwable::Error then or to also use inline_constructor => 1 > then?
inline_constructor => 0 > I guess I'm not sure why the method modifier would be lost, but that's just > my lack of understand of how Moose works. ;) If I understand it properly, the inlined constructor would be a different subroutine entry from the one being modified. If we draw it out a little (with package names changed to protect the innocent): package Parent; use Moose; # bring's in Moose::Object::new around new => { ... }; # replaces Moose::Object::new with "Parent::wrapped_new" package Child; use Moose; extends qw(Parent); # brings in "Parent::wrapped_new" __PACKAGE__->meta->make_immutable(); # tries to create a Child::new # ... but the wrapper is already applied as a part of Parent::wrapped_new # ... and so isn't going to be applied Does this help? -Chris