in reply to Re^2: Greediness of * vs. greediness of +
in thread Greediness of * vs. greediness of +

If you execute it a second time, it starts off from where it left.
If that where true, while (/(b*)/g) would never finish. It starts where it finished the previous time, unless it matched an empty string. In the latter case, pos() will be advanced by one. (Details are even more complicated. But documented. See the section "Repeated Patterns Matching a Zero-length Substring" in the perlre manual page.)