Я работаю над очень большой, очень старой "исторически выращенной" кодовой базой. Раньше люди часто думали: "О, мне может понадобиться этот и этот модуль, поэтому я просто включил его...", а позже люди часто "кэшировали" данные внутри модулей ( "Use ThisAndThat" нуждаются в нескольких секунд, чтобы загрузить несколько сотен МБ из БД в ОЗУ, да, это действительно глупая идея, мы тоже работаем над этим), и поэтому часто у нас есть небольшой модуль, который использует 20 или 30 модулей, из которых 90% полностью неиспользуемый в самом источнике, и из-за "кэширования" в нескольких используемых подмодулях модули, как правило, занимают одну минуту, чтобы загрузить или даже больше, что, конечно, неприемлемо.
Итак, я пытаюсь сделать это лучше. Прямо сейчас, мой путь просматривает все модули, понимая их как можно больше, и я смотрю на все модули, включая их, и вижу, нужны они или нет.
Есть ли более простой способ? Я имею в виду: есть функции, возвращающие все подмножества, которые модуль имеет как
...
return grep { defined &{"$module\::$_"} } keys %{"$module\::"}
так что, нет ли какой-либо простой способ увидеть, какие из них экспортируются по умолчанию и какие из них поступают откуда и используются в других модулях?
Простым примером является Data:: Dumper, который включен почти в каждый файл, даже если все debug-предупреждения и печати и т.д. arent в script больше. Но все же модуль должен загрузить Data:: Dumper.
Есть ли простой способ проверить это?
Спасибо!