in reply to Regex: continuous matching positions

The problem is that the regex consumes the characters it matches (so the next match happens after those characters). Use a look-aahead to not consume:
while ($str =~ /(?=(\w{3}bc\w{2}))/g) { print "$-[1],$+[1],$1\n"; }
Update: extra ')' added to regex (thanks SamCG and prasadbabu!)

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart