prefer Sub::Util over Sub::Name because it has a smaller footprint (doesn't load up Dynaloader.pm, Config.pm, vars.pm, base.pm)
only load Text::Balanced if we really need it (rarely)