Got it, thanks Jesse! --Peter
>________________________________ > From: Jesse Luehrs <d...@tozt.net> >To: Peter Shangov <pshan...@yahoo.com> >Cc: moose <moose@perl.org> >Sent: Tuesday, 17 July 2012, 15:33 >Subject: Re: BUILDARGS not invoked by 'new_object' > >On Tue, Jul 17, 2012 at 04:08:09AM -0700, Peter Shangov wrote: >> Hi all, >> >> It appears that if I create an object with $metaclass->new_object(), >> BUILDARGS will not be executed, e.g.: >> >> >> { >> package Foo; >> use Moose 2.0603; >> >> sub BUILDARGS { warn "Building args"; return {} } >> } >> >> Foo->new; # warns >> Foo->meta->new_object; # doesn't >> >> The same does not apply to BUILD, which will be executed in both >> cases. Is this the desired behaviour? > >Yes, this is working as intended. The idea is that the method signature >for the lower level new_object call should be fixed - it should take a >hashref of init_args always, regardless of anything else that's going on >(so that it's more predictable). If you want to fiddle with the API for >how objects are constructed, you can change how ->new works in your own >class, but metaclasses are used to describe many different classes. > >If this is an issue for you, Foo->meta->name->new(...) works fine. > >-doy > > >