njcodewarrior,
You're right in that the map function acts like a loop. Where is gets tricky is when you assign the output of the map function to a hash, because the hash assignment operation evaluates
two elements at a time. So Perl does the equivalent of this:
my $i=0;
while ($i<$#group) {
$hash{$group[$i]}=$group[$i+1];
$i+=2;
}
As other monkers already pointed out the "odd number of elements" warning will be generated when you feed the hash with a group that has an odd number of elements.
Now if we look at the map function itself in your code
@destination = map {$_++} @source
The effect of the above code is that the elements are copied one by one. At the same time the element in the source (!) group is changed/incremented. Thatīs probably not what you wanted, right?
If the destination of the map function is a hash then commonly the map is used to produce 2 elements at a time in a list fashion:
.... = map { ("key$_" , "value$_") } .....
For clarity purpose the comma operator is typically replaced by a '=>' operator to indicate that we mean to produce something for a hash.
.... = map { ("key$_" => "value$_") } .....
I'm not sure what you hoped to achieve through your code but hopefully this shows why your code behaved as it did