The braces around the prefixes can be done away in this case, so @{array} is the same as @array, ${val} is the same as $val. And this is why @{shift} is made to be an array whose name can also be written as @shift and of course array is not related to the function shift().
Excellence is an Endeavor of Persistence.
A Year-Old Monk :D .