If shift is called outside of a sub, then @ARGV is the shifted list or, put another way, shift only acts on @_ if either shift called within a sub or @_ is explicitly supplied as an argument e.g. shift @_ (see shift).
Update:
Added extra circumstance under which @_ is acted on
A user level that continues to overstate my experience :-))