in reply to Shift versus Sanity

I almost always prefer the my ($self) = @_; style in general, but there are circumstances where you really want to use shift, such as when you're going to pass your own arguments down to another routine:

my ($self) = shift; helper_sub(@_);
It's really a question of judicious choices: function first, performance second. Cargo-cult programming third ;-)