Строка с регулярным выражением не всегда используется

В настоящее время я переписываю некоторый собственный perl-код, используемый в системе продажи билетов OTRS, который используется для создания SQL-подобных запросов. Да, вероятно, есть лучшие способы избежать ввода, но давайте не будем вдаваться в это...

$Param{PostMasterSearch} содержит адрес электронной почты, например test'[email protected] (обратите внимание на ').

my $PostMasterSearch = $Param{PostMasterSearch};
$PostMasterSearch =~ s/'//gms;
$Self->{LogObject}->Log(
    Priority => 'error',
    Message => "XXXXX: $PostMasterSearch",
);
$SQLExt .= " $Field LIKE '$PostMasterSearch'";

Таким образом, я ожидаю, что найду сообщение журнала, говорящее XXXXX: [email protected], и часть SQL-запроса, который выглядит как Email LIKE '[email protected]'.

Но на самом деле я получаю только сообщение журнала - строка SQL-запроса по какой-то причине Email LIKE 'test'[email protected]'.

Прикрутить последнюю строку кода, чтобы было похоже

$SQLExt .= " $Field LIKE '$PostMasterSearch' X";

не имеет никакого смысла, но возвращает строку Email LIKE '[email protected]' X.

Какие-нибудь намеки на то, почему $PostMasterSearch все еще содержит тот ', который давно должен был исчезнуть? Или подсказка о том, как соединить $SQLExt с версией $PostMasterSearch без '?


person Martin    schedule 10.05.2014    source источник
comment
Странный. Вы уверены, что ' не является каким-то символом Юникода, например U+2018 или U+2019?   -  person choroba    schedule 10.05.2014


Ответы (1)


Хорошо, теперь это та часть, где становится неловко...

Оказывается, этот скрипт содержит один и тот же код несколько раз и выполняет его несколько раз...

Таким образом, приведенный выше код действительно работает и не возвращает никаких ошибок (как и должно быть). Сообщение об ошибке вызвано очередным появлением кода, который еще не был исправлен.

tl;dr: Я, вероятно, должен выбросить этот сценарий и переписать его с нуля.

person Martin    schedule 10.05.2014
comment
Пожалуйста, примите свой собственный ответ, чтобы другие могли видеть, что вопрос решен. - person Borodin; 11.05.2014