sub mylol { my $self=shift; { local $self; $self->{data} = {newdata => 1}; $lol = super(); } } #### sub mylol { my $self = shift; local $self->{data} = { newdata => 1 }; super(); # $self->{data} is restored here }; #### 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); }