A better question is why are you trying to destroy your array. Why not modify the values in place, rather than shift them off; or, leave them alone and set @arr = (); or such. Shifting is a processes that while fast isn't needed here. And, any for loop will either require you increment a counting variable (fast), or copy the array (slow). A while loop would work but would still be bad practice because you would have to completly destroy the array thus making it evaluate to 0 in scalar context, or exit the loop (last;) from within the body of the loop.
Please submit the rest of your code, I can almost assure you this is bad practice. Allow us to criticize!