This is all good, but I would say that "end weight" should
be the deciding factor. In this case (and probably in most
cases), the source of the list is very simple (just an array)
so it makes more sense to specify the list first, and then
follow it with the block of code acting on it: you use
foreach.
In cases where the source of the list you're acting on is
more complicated, you might be able to improve clarity by
switching this around and using map to put the code block
first, followed by the list.
(By the way, did you know that map has now been optimized
for use in void context? It used to be you'd take a performance hit for using map instead of foreach, but that's
not true anymore, for the latest versions of perl.)