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.
In reply to Re: What is this Moose mojo?
by stvn
in thread What is this Moose mojo?
by locked_user sundialsvc4
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |