Должна быть простая конструкция Perl ведет себя не так, как я ожидаю.
Массив @closest
содержит строки вида "NNN-NNN".Я пытаюсь найти первый элемент массива, в котором начальный NNN соответствует определенному значению.
Поскольку я объявил $compoundKey
вне цикла, я ожидаю, что он будет постоянным.Цикл ведет себя, как и ожидалось, выходя, когда я получаю совпадение.Однако после выхода кода из цикла переменная $compoundKey
становится пустой.(См. Вывод журнала после кода. Я ищу "83". Соответствующий элемент не является последним элементом в массиве.)
my $compoundKey;
foreach $compoundKey (@closest)
{
logentry("In loop compoundKey is $compoundKey\n");
last if ($compoundKey =~ /^$RID/);
}
logentry("Outside loop compoundKey is $compoundKey\n");
Файл журнала:
2019-02-27 18:15:26: In loop compoundKey is 90-1287
2019-02-27 18:15:26: In loop compoundKey is 86-1223
2019-02-27 18:15:26: In loop compoundKey is 86-1235
2019-02-27 18:15:26: In loop compoundKey is 87-1316
2019-02-27 18:15:26: In loop compoundKey is 89-1219
2019-02-27 18:15:26: In loop compoundKey is 83-1224
2019-02-27 18:15:26: Outside loop compoundKey is
Iпредположим, что я могу это исправить, выполнив явное присвоение временной переменной цикла $compoundKey
, но я все еще несколько озадачен.Есть ли какая-то ошибка в моем коде, которую я не вижу?Или «последнее» выражение в Perl ведет себя совершенно иначе, чем «break» в C или Java?
Спасибо!