in reply to When would you choose foreach instead of map?

Let's look at this example you provided:
@array = map {$_ *= 2} @array;
You're taking @array, changing each value in it, and then assigning it to @array. One of those equals signs is redundant. (If it's not clear why, see below. See below anyway.)

That is a good way to highlight what the others have already said: if you're making a new array, you'd use map like so:

@a2 = map { $_ * 2 } @array;
If you just want to change @array itself, your best fit is foreach (as you used it in your other example), although you can use map in a void context to do the same thing:
map { $_ *= 2 } @array;

The PerlMonk tr/// Advocate

Replies are listed 'Best First'.
Re: Re: When would you choose foreach instead of map?
by doom (Deacon) on May 21, 2004 at 01:35 UTC
    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.)