The foreach in from perlretut goes through the numbers associated with the matches in the parentheses. So ${$_} in the code above evaluates to ${1} which is $1. $1 is the captured match from in the first set of parens. That's why you see 'Mmm'.
Now as far as your code goes, I believe that your for loop should loop over (1..$#-), or the actual matches. If you look at the @+ array, you see that it has the correct number of elements, but they aren't all defined (because we only used the first match in the parens).
I forgot to ask what you expected to see as the output. I was going to suggest a code change, but it depends on what you are trying to see as output.