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.