#perl #otrs
Вопрос:
В настоящее время я получаю эту ошибку в своей системе OTRS, и я не могу понять, что происходит.
Ошибка в системном журнале:
Произошла ошибка при выполнении Execute() в ядре::Система::Консоль::Команда::Maint::Опрос::RequestsDelete: Использование неинициализированного значения $Строка[3] в конкатенации (.) или строка в /opt/otrs/Ядро/Система/Консоль/Команда/Maint/Опрос/RequestsDelete.pm строка 132.
Часть кода, которая неисправна:
# fetch the result
while ( my @Row = $DBObject->FetchrowArray() ) {
my $Result = join(
' ', "Survey:" . $Row[0] . "t",
"TicketNumber:" . $Row[1] . "t",
"SendTime:" . $Row[2] . "t",
"VoteTime:" . $Row[3] . "t",
"CreateTime:" . $Row[4] . "t"
);
$Self->Print("$Resultn");
}
Комментарии:
1. Это означает, что переменной
$Row[3]
не было присвоено значение или ей было присвоено значениеundef
. Возможноwarnings
, они включены, вот почему появляется это сообщение (что хорошо).2. тихая странность, потому что я не могу видеть этот ряд на интерфейсе. Кроме того, я запускаю RequestsDelete по ssh, и никаких ошибок не происходит, а журналы по-прежнему пусты. Распечатать здесь: imgur.com/73tEW8E
3. Независимо от этого предупреждения,
$Result
значение должно выводиться в консоли.4. Как я могу это сделать?
Ответ №1:
Можете ли вы проверить схему БД для таблицы, доступ к которой осуществляется через $DBObject->FetchrowArray()
? Первое, что нужно сделать, это убедиться, что эти поля действительно существуют.
Независимо от того, можете ли вы проверить схему или нет, рекомендуется выполнить проверку полей и указать значение по умолчанию, если это не так, например
$Row[3] = '' if not defined $Row[3];
или
$Row[3] = '-' if not defined $Row[3];
или
$Row[3] = 'not defined' if not defined $Row[3];
или
$Row[3] //= 'not defined';
Тогда ваш код будет защищен от пропущенных данных.
Просто используйте значение по умолчанию, которое имеет смысл для вывода.
Комментарии:
1. @ikegami, это отличная идея! Я склонен избегать кратких примеров, так как они иногда сбивают с толку людей, незнакомых с Perl, но лично мне нравится этот синтаксис.