Как мне реализовать отложенную загрузку модуля в Perl? - PullRequest
8 голосов
/ 10 ноября 2009

Как мне реализовать отложенную загрузку модуля в Perl?

Я видел похожие вещи в python, и реализация несколько проще, но в Perl я думаю, что это будет немного сложнее.

1 Ответ

20 голосов
/ 10 ноября 2009

Загрузите модуль, когда хотите

Если вам нужно загрузить весь модуль во время выполнения, вы используете require. Но для импорта вам потребуется дополнительный код. Вот пример:

## this function is almost the same 
## as "use My::Module qw( :something  )"
sub load_big_module_at_runtime {
    ## load module in runtime
    require My::Module;
    ## do import explicty if you need it
    My::Module->import( ':something' );
}

Загрузка модуля при использовании его функций

Вы также можете использовать autouse для загрузки модуля только тогда, когда используется его функция. Например:

## will load module when you call O_EXCL()
use autouse Fcntl => qw( O_EXCL() );

Функция загрузки только при использовании

Также имеется модуль SelfLoader, который позволяет загружать отдельные функции только тогда, когда вам это нужно. Взгляните на модуль AutoLoader, который делает почти то же самое.

Я также рекомендую прочитать основные рецепты из Perl Cookbook .

...