in reply to Bizarreness in ?PATTERN? and g

That is not weird at all. Perlop says this:

?PATTERN?
This is just like the /pattern/ search, except that it matches only once between calls to the reset() operator.

The reason the second snippet works is because you have two separate instances of the same pattern match. The g allows you to continue with the next match (whether that is due to a reset or a separate pattern match). Observe:

$_="a1 a2 a3"; while(?a(\d)?g){ print $1; reset; } __DATA__ 123

If you remove that g, you end up with an infinite loops of 1's. Remove the reset and the g and you are right back to the output being a single, solitary 1.