Feature #15231
Updated by znz (Kazuhiro NISHIYAMA) about 7 years ago
`Object#=~` receives (and just discards) an argument, and always returns nil. What purpose is this method for?
The following behavior that `Object#=~` caused was confusing to me.
```
["foo"] =~ /foo/ #=> nil
```
More precisely: the actual example that I encountered was to parse coverage data from output of coverage measurement tool by using `Open3.capture2`:
```
out = Open3.capture2("gcov", ...) # BUG: `out, =` was intended
if out =~ ~= /lines\.*: *(\d+\.\d+)%/
...
end
```
Obviously, I forgot a comma to receive the return value of `Open3.capture2`. The method returns a two-element array, and `out =~` ~=` calls `Object#=~`, which hided the bug. (Worse, I took several tens of minutes to debug it because I first thought that this is a bug of regexp, and spent tweaking the regexp.)
I guess `Object#=~` was intended for general pattern matching, but presently the role was taken over by `Object#===`.
So. How about removing `Object#=~`?
Concerns:
* @usa said `NilClass#=~` should be newly introduced because of: `if gets =~ /re/`
* `Object#!~` is difficult to remove: some classes define only `#=~`, and expect `Object#!~` to delegate to `#=~`.