require Tie::OneOff; package cool; sub name : lvalue { my $self = shift; +Tie::OneOff->lvalue({ STORE => sub { my $val = shift; # Do whatever $self->{NAME} = $val; }, FETCH => sub { $self->{NAME}; }, }); }