...один скрипт запускает другие функцией SUB...
Вот это и подозрительно. Такое трактование SUB.
За переменными нужно следить, не бросать их на произвол судьбы. Холить и лелеять. Обнулять при необходимости. Разделить их в уме и скрипте минимум на две группы: постоянные (или долгоиграющие) и более менее временные которые используются в небольшом законченном блоке и вне его могут быть свободны и использоваться повторно.
Я не против дополнительных функций, это хорошо. Но если ты забываешь обнулить необходимые переменные (а обычно их не много, вообще единицы), то так же будешь забывать о нужных стирая их глобальным затиральщиком.
Я, например, вообще не вижу для себя применения такой команды. Всегда есть переменные - константы для каждого скрипта. Есть переменные полученные и заданные близко к началу и необходимые до самого конца.
" выше этой команды... ну естественно не трогая переменные в #include" опять же или не представление что такое #include или я даже не знаю. #include это не функция и код подключаемый по нему может быть и обычным кодом и функцией и подпрограммой, да всем чем угодно. Почему тогда нужно код подключаемый #include исключать из "UNDEFINE"? Это дополнительные ограничения, которые нужно помнить, об которые будут постоянно спотыкаться и которые почти никому не нужны.
Придётся добавлять часть лишнего кода только ради того, что кто-то не привык обнулять переменные в нужных местах или это лень делать.
Не наезд, а только личное мнение. Может я и не прав.