in reply to creating an altered clone of a Moose object for a limited scope
Your example is quite unclear to me. What is this supposed to to?
sub mylol { my $self=shift; { local $self; $self->{data} = {newdata => 1}; $lol = super(); } }
You could simply localize ->{data} and be on your merry way:
sub mylol { my $self = shift; local $self->{data} = { newdata => 1 }; super(); # $self->{data} is restored here };
(or, depending on what super() does, just ditch whatever contraptions Moose creates, and directly call $self->SUPPER::mylol, to achieve your goal).
Update: After having looked at Moose::super, I'm not really sure what your aversion is against package variables, as it uses them as well. And your locally setting $self is quite unlikely to have any sane (or desired) effect as likely the referenced global variables in Moose:: get set from a wrapper installed by Moose::override:
package Moose; ... our $SUPER_PACKAGE; our $SUPER_BODY; our @SUPER_ARGS; sub super { # This check avoids a recursion loop - see # t/bugs/super_recursion.t return if defined $SUPER_PACKAGE && $SUPER_PACKAGE ne caller(); return unless $SUPER_BODY; $SUPER_BODY->(@SUPER_ARGS); }
I'm not sure what that contraption is supposed to achieve, but then, maybe that's because I have either never encountered the problems that Moose attempts to solve or have always taken other approaches to these problems.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: creating an altered clone of a Moose object for a limited scope
by metaperl (Curate) on Jul 09, 2011 at 14:13 UTC |