I don't really see how this would be any different from match?
Beside that, the semantics are a bit ambiguous. "foo".sub(/bar/, 'x') does work, it just doesn't replace anything because there is no match for the regex. So would sub? mean that we can replace it at least once, and gsub? that we can replace it at least twice?