1. Тебе во первых нужно научится пользоваться require и use и, что важнее понять как они работают.
require \'blabla.cgi\' - больше не пользуйся этим.
в место этого позуйся класическим представлением модуля
К примеру выберем директорию /PM относительно корня сайта, куда будем класть все модули
blablabla.pm - обзываем все модули с расширением .pm
----
package PM::blablabla; # Данная директива выделяет нам чистую таблицу переменных, это гарантирут, что переменные у нас никогда не пересекуться. PM::blablabla - это внутреннее представление perl\'а о путе до модуля, соответствует PM/blablabla.pm в реале.
...
...
...
1; # Последняя строка должна выглядеть так, ибо require хочет, чтоб модуль всегда возвращал истинный результат
---
Теперь о подключении модуля:
-----
# Perl ищет модули в путях, записанных в массиве @INC, поправим его
BEGIN { unshift @INC, $ENV{DOCUMENT_ROOT} }
# use lib $ENV{DOCUMENT_ROOT} - тоже самое
# теперь чтобы подключить его нужно воспользоваться require или use
# use PM::blablabla @params - это примерно тоже самое что и BEGIN { require PM::blablabla; import PM::blablabla @params }
use PM::blablabla;
---
Почитай документацию по этим директивам + perldoc Exporter;
2.
что если я буду пользоваться require в том же объеме, что и пользовался ранее, то все преимущества mod_perl сойдут на "нет"
Это не так.
3. Registry предкомпилирует все, PerlRun все кроме стартового скрипта и обнуляет переменные при выходе. На практике между PerlRun и Registry разница почти незаметна при небольшом стартовом скрипте. Но проблем существенно меньше. Плюсы минусы я описал. Решать тебе.
зы: Преимущество mod_perl еще и в том, что с ним не порождается новый процесс каждый раз когда запускается скрипт как при mod_cgi