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