Reconozco que es una práctica que uso mucho. Uso demasiadas variables globales, cosa que hace que un código quede algo ilegible. Queda extraño leer alguna función en algún programa grande, y ver de repente una variable, la cual no sabes donde usas, qué contiene o para que sirve.
Evidentemente si perseguimos obtener un código limpio y entendible a los ojos de la mayoría de los programadores, debemos evitar esta práctica. Pero se nos plantea un problema. Imaginemos un programa bastante grande, el cual queremos una variable común a todas las funciones y a todos los procedimientos, para llevar un control del estado de las funciones (Imaginemos que las funciones tienen estados, dependiendo de sus resultados)