in reply to what does shift do?

I'm not sure of your context, but shift is just getting the first argument to a subroutine and passing it along to your variable. It's shifting off @_. It's a construct used a lot writing objects.