The foreach (and for and map, etc) command can be used to modify the list that it is iterating over
I recommend the Effective Perl Programming
book to you and your workmates, especially item 20, "Use foreach, map and grep as appropriate"
, which gives an excellent summary of when to use foreach
- Use foreach to iterate read-only over each element of a list
- Use map to create a list based on the contents of another list
- Use foreach to modify elements of a list
- Use grep to select elements in a list
I've often asked new Perl programmers at work to read this item when I find them writing inappropriate C-style for
loops or discover they are confused about foreach
and have never even used map
Note that Hall, McAdams and foy further caution against modifying a list via map:
"For efficiency, $_ is actually an alias for the current element in the iteration. If you modify $_ within the transform expression of a map, you modify the input data. This is generally considered to be bad style, and -- who knows? -- you may even wind up confusing yourself this way. If you want to modify the contents of a list, use foreach."