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.
In reply to Re: creating an altered clone of a Moose object for a limited scope
by Corion
in thread creating an altered clone of a Moose object for a limited scope
by metaperl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |