in reply to What is the + in +shift doing here?

It is just a way of disambiguating the shift (or any other function name for that matter) in a location where it might be mistaken for another bareword lexical item. You will often find this (most commonly IMO) in print statements such as:

print +join '', @array;
where the join would be misparsed as being a filehandle rather than a function.

The reason that the unary + is used is that it is syntactically valid (for reasons of symmetry I guess) but is a no-op.

/J\