Не уверен, почему QuantumPete подвергается отрицательному голосованию, он, кажется, прав в этом. Вы не можете сказать local
инициализировать переменные в вызывающем блоке. Его функциональность особая, и инициализация / разборка, которую он выполняет, работает только в том блоке, где он был запущен.
Существуют некоторые экспериментальные модули, такие как Sub :: Uplevel и Devel :: RunBlock , которые позволяют вам попытаться «обмануть» caller()
для подпрограмм или сделать «длинный» переходить от значений к более высоким кадрам стека (соответственно), но ни один из них не влияет на то, как local
обрабатывает переменные (я пытался.:)
Так что сейчас, похоже, вам действительно придется жить с локальными объявлениями в той области, где они вам нужны.