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 .