Проблема здесь заключается в том, что интерполяция строк .
Вы используете двойные кавычки ("
) при назначении строки запроса для $q
, но она содержит arobas (@
), который интерполируется.
Итак $q
на самом деле содержит:
SELECT SUBSTRING(AR_email, LOCATE(', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE(', AR_email) + 1) =?
Если бы вы выполняли это в use warnings
, вы получили бы это сообщение:
Possible unintended interpolation of @' in string
Один из способов решить это - определить запрос в качестве литеральной строки, например:
my $q = q/SELECT SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) AS domain
FROM carrier
WHERE AR_email IS NOT NULL
AND SUBSTRING(AR_email, LOCATE('@', AR_email) + 1) =?/;
Мораль истории:
используйте двойные кавычки только тогда, когда вы делаете хотите интерполяцию строки
всегда use strict; use warnings;