Я пытаюсь разделить строку, используя функцию разделения, но между токенами не всегда есть значение.
Пример: ABC, 123 ,,,,,, XYZ
Я не хочу пропустить несколько токенов. Эти значения находятся в определенных позициях в строке. Однако, когда я делю разделение, а затем пытаюсь выполнить пошаговый просмотр полученного массива, я получаю предупреждения «Использование неинициализированного значения».
Я попытался сравнить значение, используя $splitvalues[x] eq ""
, и я попытался использовать defined($splitvalues[x])
, но я не могу понять, как определить, что функция split добавляет в мой массив, когда между токенами нет значения.
Вот фрагмент моего кода (теперь с большей хрусткостью):
my @matrixDetail = ();
#some other processing happens here that is based on matching data from the
#@oldDetail array with the first field of the @matrixLine array. If it does
#match, then I do the split
if($IHaveAMatch)
{
@matrixDetail = split(',', $matrixLine[1]);
}
else
{
@matrixDetail = ('','','','','','','');
}
my $newDetailString =
(($matrixDetail[0] eq '') ? $oldDetail[0] : $matrixDetail[0])
. (($matrixDetail[1] eq '') ? $oldDetail[1] : $matrixDetail[1])
.
.
.
. (($matrixDetail[6] eq '') ? $oldDetail[6] : $matrixDetail[6]);
, поскольку это всего лишь фрагменты, я оставил часть другой логики, но оператор if находится внутри подпрограммы, которая технически возвращает массив @matrixDetail обратно. Если я не нахожу совпадение в своей матрице и вручную устанавливаю массив равным массиву пустых строк, то я не получаю предупреждений. Это только когда разделение заполняет @matrixDetail.
Кроме того, я должен отметить, что я пишу код в течение почти 15 лет, но только недавно мне понадобилось работать с Perl. Логика в моем сценарии здравая (или, по крайней мере, работает), я просто анализирую свои предупреждения и пытаюсь выяснить этот маленький нюанс.