This is the behavior that I'd expect. Specifically, %+ gets cleared before each regexp execution, so any matches you got before will not be carried over. This is equally true of capture variables $1, $2, etc.