Como você refatora com segurança em um idioma com escopo dinâmico?

Para aqueles que têm a sorte de não trabalhar em uma linguagem com escopo dinâmico, deixe-me fazer uma pequena revisão sobre como isso funciona. Imagine uma pseudo-linguagem, chamada "RUBELLA", que se comporta assim: function foo() { print(x); // not defined locally => uses whatever value `x`...