the one thing i don't think anybody mentioned yet explicitly is that
shift shifts @_ by default.
combine this with the fact that the OO syntax (
Foo::Bar->new or
new Foo::Bar) automatically puts the classname at the front of the argument list, and you see what's going on.