in reply to Is setting attributes with BUILD in Moose a bad idea?

G'day nysus,

I don't see anything intrinsically wrong with what your doing. In fact, the BUILD section of Moose::Manual::Construction shows a similar example.

As this was intended to be a general question, I'll just point out BUILDARGS (which is in the same documentation page). In some cases, that may be a better option.

One of the main differences between the two of those is that BUILDARGS occurs before object creation, while BUILD occurs after. That's typically the main criterion I use when choosing which to use. By the way, you're not restricted to using one or the other: I've certainly used both at various times.

— Ken

Replies are listed 'Best First'.
Re^2: Is setting attributes with BUILD in Moose a bad idea?
by nysus (Parson) on Dec 01, 2017 at 04:37 UTC

    Yeah, after posting this question, I boned up on Moose construction. One important thing I learned is that Moose will just throw out arguments to the object that aren't used; I had always assumed that would throw an error. So what I ended up doing is using a combination of BUILDARGS and BUILD to process the arguments passed to the constructor before setting the attribs attribute and was able to just get rid of the attrIbs attribute. I think it has made my code a little less inscrutable.

    Thanks for your input.

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

      > Moose will just throw out arguments to the object that aren't used

      Raison d'être of MooseX::StrictConstructor.

      ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

      Yeah, after posting this question, I boned up on Moose construction. One important thing I learned is that Moose will just throw out arguments to the object that aren't used; I had always assumed that would throw an error. So what I ended up doing is using a combination of BUILDARGS and BUILD to process the arguments passed to the constructor before setting the attribs attribute and was able to just get rid of the attrIbs attribute. I think it has made my code a little less inscrutable.

      That sounds so bizzare when you say it out loud, is Moose really that impenetrable?