С вашего языка вы, кажется, представляете, что ваша последовательность замен работает вперед через строку, каждая замена занимает место, где остановилась последняя. Фактически каждая подстановка будет применяться ко всей строке.
Когда вы говорите «позиция последней замены», что должно произойти, если предыдущая замена ничего не нашла?
В скрипте вы можете просто сделать:
if ( s/\s\+\d\d\d\d\]// ) { $' =~ s/ /+/g }
но следует избегать использования $ 'в повторно используемом коде, поскольку это может повлиять на производительность других регулярных выражений. Там вам нужно сделать
if ( s/\s\+\d\d\d\d\]// ) { substr($_, $+[0]) =~ s/ /+/g }
но в любом случае вам нужно убедиться, что совпадение или подстановка, которые вы ожидали установить $ 'или @ +, действительно были успешными.