Thanks for the extra bit of enlightenment, Jesse and Chris. As you might have guessed I'm still a bit of a Moose n00b myself. After the holidays I will need to change a few triggers to type constraints. :)
Mike On Fri, Dec 25, 2009 at 3:59 AM, Jesse Luehrs <d...@tozt.net> wrote: > On Thu, Dec 24, 2009 at 05:34:07PM -0500, Chris Prather wrote: >> On Thu, Dec 24, 2009 at 4:55 PM, Mike Friedman <fri...@friedo.com> wrote: >> > You should be able to do this with triggers. For example: >> > >> > has foo => ( isa => 'Str', is => 'rw', trigger => \&_munge_foo ); >> > >> > sub _munge_foo { >> > my ( $self, $new_foo, $old_foo ) = @_; >> > >> > $new_foo =~ s/\W+/_/gs; >> > $self->{foo} = $new_foo; >> > } >> > >> > The trigger will be called every time foo is set, including in the >> > constructor. >> > >> > >> > Mike >> >> A Trigger really is the wrong way to go about this. While yes this >> will work it's not considered "best practice". > > I don't think Chris was strong enough here... accessing the hash values > directly for a Moose object is *never* correct (except in really really > weird edge cases like custom serialization code, and only if absolutely > necessary). If you find yourself thinking that you want to access a hash > slot directly like this, you're doing it wrong, and you should really > try to find the right way to do it. (In this case, this is not the > intended use for triggers, which is why you can't do what you want to do > directly with accessor methods and such.) > > -doy >