¿Cómo refactorizar de forma segura en un lenguaje con alcance dinámico?

Para aquellos de ustedes que tienen la suerte de no trabajar en un idioma con alcance dinámico, permítanme darles un pequeño repaso sobre cómo funciona. Imagine un pseudo-lenguaje, llamado "RUBELLA", que se comporta así: function foo() { print(x); // not defined locally => uses whatever value...