СLICKERMANN вер 4.12.001
OC Windows 8.1
Совпадение имен переменных используемые в подпрограммах, как входные, так и локальные приводят к перезатиранию внешних переменных.
т.е. для корректной работы, подпрограммы не должны использовать одинаковые имена входных параметров, а так же имена переменных используемых до или после во всём скрипте.
"Локальные переменные подпрограммы (параметры) при этом будут уничтожены.", а так же будут зачищены все глобальные/внешние переменные у которых имена совпали с именами входных параметров, что как то не очень очевидно.
// Некоторая подпрограмма
sub(test, $id)
print("in test id:", $id)
$x = 10
print("in x:", $x)
end_sub
// Ещё одна
sub(test2, $id)
test($id)
print("in test2 id:", $id)
// Ожидаем, что выведем id, который пришел на вход но будет всегда 0
end_sub
// Объявляем переменные
$id = 1
$x = 2
print("out id before: ", $id)
print("out x before: ", $x)
// Вызываем подпрограммы
test(1)
test2(2)
// Ожидаем что id=1, а x=2
print("out id after: ", $id)
print("out x after:", $x)
// Но id=0, а x=10