The unary ~
operator has higher precedence than ==
or =~
so this:
string ==~ /^ABC/
is just a confusing way of writing:
string == (~/^ABC/)
But what does Regexp#~
do? The fine manual says:
~ rxp → integer or nil
Match—Matches rxp against the contents of$_
. Equivalent torxp =~ $_
.
and $_
is “The last input line of string by gets or readline.” That gives us:
string == (/^ABC/ =~ $_)
and that doesn’t make any sense at all because the right hand side will be a number or nil
and the left hand side is, presumably, a string. The condition will only be true if string.nil?
and the regex match fails but there are better ways to doing that.
I think you have two problems:
==~
is a typo that should probably be=~
.- Your test suite has holes, possibly one hole that the entire code base fits in.
See also What is the !=~ comparison operator in ruby? for a similar question.
1
solved What is the meaning of operator ==~ in Ruby? [duplicate]