Die Doku ist wie immer exzellent und beschreibt ganz genau, was passiert, hier gibt es keinen Raum für Überraschung. Die Folgen des Nichtlesens derselben ist allein dem Programmierer anzulasten.
perlsyn#Foreach-Loops:
| the foreach loop index variable is an implicit alias for each item in the list
| that you're looping over.
Der Sachverhalt ist Aliasing, nicht Call-by-something, bitte nicht in einen Topf schmeißen.