原です。

str.sub!(regex, expr) で regex が str 全体にマッチして、
かつ、expr が '' の時、置換が起こりません。関数の方も。

str = "abc"
str.sub!(/abc/, '')
print str, "\n"           # => abc (NG)
str.sub!(/c/, '')
print str, "\n"           # => ab
str.sub!(/ab/, 'AB')
print str, "\n"           # => AB


といっても、まつもとさん出てくるの来週かな。
---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=--
                           Shin-ichro Hara(Nagaoka Univ.of Tech.)