I believe this is because shift() is diffrent than shift. Calling shift() i believe forces shift to be called with no arguments, rather than with @_ as is done when called without parens.
Reference : Programming Perl, 3rd Edition -- Chapter 6 -- Page 218
from the frivolous to the serious