Во-первых, при изучении Perl вы всегда должны использовать предупреждения и строгие правила.
Когда вы выполняете сопоставление с регулярным выражением, вы сопоставляете подстроки внутри строк, поэтому ваши совпадения являются строками. Тем не менее, Perl преобразует строки в числа, если контекст требует этого. Например, если вы напишите:
$ 4 - $ 1
$ 4 и $ 1 должны быть числами, потому что для строк нет оператора -, поэтому perl преобразует строки $ 4 и $ 1 в их числовые эквиваленты, а затем perl выполняет вычитание. Аналогично, если вы напишите:
$ 4 == ""
оператор == работает только с числами, поэтому perl конвертирует $ 4 в число --- но perl не решается конвертировать "" в число. Если вы пишете строковый литерал, такой как «собака» или «» в своем коде, где вызывается число, тогда Perl подозревает, что вы, возможно, допустили ошибку, и использует предупреждения, чтобы Perl предупредил вас о возможной ошибке, а не просто слепо совершая обращение.
Для сравнения строк в Perl вы используете оператор eq.