Почему глобальные переменные не принято использовать?
потому что становиться легко выстрелить в коленку.
например, при рефакторинге переименовав переименную не во всех методах и тому подобные сайдэфекты.
или установив сторонний модуль/библиотеку/etc, где используется переменная с таким же именем.
усложняется контроль данных и еще куча всего. нет особого смысла повторять что уже было написано:
https://cbabhusal.wordpress.com/2015/09/27/ruby-wh...
softwareengineering.stackexchange.com/questions/14...
Глобальная переменная это зависимость, что ведет к тому что код нельзя повторно использовать (перенести в другой проект, например).
Ситуация с глобальными переменными похожа на ситуацию с goto. Оба инструмента бывают очень полезны, но без знания всех особенностей ими легко злоупотребить во вред. Поэтому нубам их просто запрещают использовать без объяснений т.к. объяснять все тонкости будет дольше и все равно не поймут.