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. |