Actually, there is no mojo at work here, and this is most certainly not the right way to do this. I suspect to that this feature is not well tested either, because the user defined 'fif' subroutine will never get called. It likely warrants a rt.cpan.org bug report even (although I don't know, I have never used the module in question).

has 'fif' => ( is => 'rw', reader => '_fif' ); sub fif { my $self = shift; return $self->_fif unless $self->password; }

What is happening here is that at compile time, the user defined method 'fif' is created and added to the package symbol table. Then in the beginning of runtime, when Moose is compiling it's code, the attribute definition creates a read/write accessor method called 'fif' and a reader method called '_fif'. The read/write accessor method actually overwrites the original user defined 'fif' method. I suspect this is not at all what was intended.

Here is what I think the author really meant to write.

has 'fif' => ( reader => '_fif' ); sub fif { my $self = shift; return $self->_fif unless $self->password; }

Here the user defined 'fif' method is retained and a Moose generated reader method '_fif' is created. Now, there is no writer method available, but honestly I am not sure they ever intended to create one anyway based on what the 'fif' method does.

-stvn

In reply to Re: What is this Moose mojo? by stvn
in thread What is this Moose mojo? by locked_user sundialsvc4

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.