Ответ 1
Это не один оператор, который два оператора записываются как один оператор.
Из таблицы приоритетов операторов (от самого высокого до самого низкого):
[] []=
**
! ~ + -
[унарный]
[несколько строк]<=> == === != =~ !~
Кроме того, класс Regexp имеет унарный ~
оператор:
~ rxp → integer или nil
Match-Matchesrxp
против содержимого$_
. Эквивалентноrxp =~ $_
.
Итак, ваше выражение эквивалентно:
"abc" != (/abc/ =~ $_)
И оператор Regexp#=~
(не такой, как более знакомый String#=~
) число:
rxp = ~ str → integer или nil
Match-Matches rxp против str.
Итак, вы становитесь истинным в качестве конечного результата, потому что сравнение строки с номером является ложным.
Например:
>> $_ = 'Where is pancakes house?'
=> "Where is pancakes house?"
>> 9 !=~ /pancakes/
=> false
>> ~ /pancakes/
=> 9