=~
является оператором привязки. Он используется для привязки значения к сопоставлению с образцом (m//
), подстановке (s///
) или транслитерации (tr//
или y//
).
eq
- оператор равенства строк; он сравнивает два значения, чтобы определить, равны они или нет, если рассматривать их как строки. Существует одноранговый оператор ==
, который делает то же самое, только рассматривая значения как числа. (В Perl строки и числа в основном взаимозаменяемы, причем преобразования происходят автоматически в зависимости от того, как используются значения. Поэтому, когда вы хотите сравнить два значения, вы должны указать тип сравнения для выполнения.)
Как правило, $var =~ m/.../
определяет, соответствует ли значение $var
шаблону, а не равно ли оно определенному значению. Однако в этом случае шаблон привязывается с обоих концов и не содержит ничего, кроме буквальных символов, поэтому он эквивалентен сравнению строк. Здесь лучше использовать eq
, потому что он понятнее и быстрее.