in reply to A way registering an anonymous sub in $self?

_proc holds a copy of the value present in $action and this is a costly method doing things,

Except all $action contains is a reference. Creating a new reference, copying it, then destroying it, all to avoid copying a reference... not very productive.

If you were talking about a string, there might be some gains. You could, for example, store a reference to the string in the object. The catch is that you'll have to dereference it later when you want to use what you stored. That's probably what was missing in your broken code.