Using $_ there is a Bad Idea, since you will wipe out whatever $_ is currently set, even if you are being called from a different package namespace. This is Not Good.
Just stick a lexically scoped variable there and all will be well.
Comment on Re (tilly) 1: Swapping object variables