The real problem was more in the OPs code. By putting a BUILD method in his role, he would have run into an issue if he tried to compose it into a class which already had a BUILD, because the local class version of a method beats the role version of it. So actually it is not really that your version was bypassing so much as just not using Roles properly. Once a role is composed into a class, it really should be "forgotten" about since all the methods are basically already "copied" into the class.

Additionally, the BUILD method is never really meant to be called by outside-of-Moose-internals code, it is meant to be called by BUILDALL and in a very specific order so that the object is initialized properly. This is all done within the context of inheritance, which is a Class specific thing. Roles do not inherit, which is why we have to do the weird tricks I showed above to hook into BUILD from a role. So while your solution will force the call to Browser::BUILD and it will happen during the BUILD of the consuming class, it is bypassing all that machinery. Currently, the result is the same, but since you are calling things usually only reserved for internals to call, there is a possibility (although very slim) that this might cause issues down the road.

-stvn

In reply to Re^3: Moose role BUILD question by stvn
in thread Moose role BUILD question by saintex

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.