Если вы предпочитаете, чтобы ваша логика происходила во время выполнения (например, если переменная $ new создается более сложным способом, который вы не хотите запускать в блоке BEGIN), вы можете использовать require () загрузить модуль во время выполнения.
Важно помнить, что
use Module;
use ModuleWithExports qw(export1 export2);
То же, что и
BEGIN { require Module; Module->import() }
BEGIN {
require ModuleWithExports;
ModuleWithExports->import('export1', 'export2');
}
Это означает, что для запуска вашего кода во время выполнения вы можете просто:
if ($new) {
unshift @INC, "newdir";
}
else {
unshift @INC, "olddir";
}
require module;
module->import(); # if necessary
Альтернативой использованию require () является использование модуля Module :: Load из CPAN.