I have simply set a rule for myself that in any function/method/subroutine/whatchawannacallit the very first thing I do is assign the contents of @_ to various temporary variables, no matter how simple the function may be. One simple my($this, $that, @therest) = @_; line will save so many headaches later on, not to mention the way it improves readibility.
Remember rule one...
Comment on Re: A warning about overloading assignment methods
There are occasionally times when you wish to be extra careful to be using an alias to the same variable your caller is using. I was doing lots of that so it was normal and expected for me to be working on things in @_ directly. That isn't the case for most code.