Когда следует использовать «use», а когда «require» и когда «AUTOLOAD» в perl [хорошая практика программирования]? - PullRequest
7 голосов
/ 12 февраля 2012

Когда мы должны использовать «use», а когда «require» и когда «AUTOLOAD» в perl? Мне нужно правило большого пальца для этого.

1 Ответ

16 голосов
/ 12 февраля 2012

use эквивалентно BEGIN { require Module; Module->import( LIST ); }

Итак, главное отличие в том, что:

  • Использование используется во время компиляции

  • Использовать автоматически вызовы подпрограммы импорта (которая может делать что угодно , но в основном используется для экспорта идентификаторов в пространство имен вызывающего абонента)

  • использовать штампы, если модуль не может быть загружен (отсутствует / ошибка компиляции)

Как таковые:

  • Когда вам нужно загрузить модули динамически (например, определить, какой модуль загружать на основе аргументов командной строки), используйте require.

  • В общем, когда вам необходимо точно контролировать, когда загружен модуль, используйте require (use загрузит модуль сразу после предыдущего блока use или BEGIN, в время компиляции ).

  • Если вам нужно как-то обойти подпрограмму вызывающего модуля import(), используйте require

  • Когда вам нужно сделать что-то умное для обработки ошибок загрузки (отсутствующий модуль, модуль не может скомпилироваться), вы можете заключить require в оператор eval { }, так что вся программа не ' просто умереть

    Вы можете смоделировать это с помощью use, но довольно изящными способами (должен срабатывать захват сигнала die в раннем блоке BEGIN). Но eval { require } лучше.

  • Во всех ДРУГИХ случаях используйте use

Я не покрывал AUTOLOAD, потому что это другая зверька. Он используется в тех случаях, когда вы хотите прерывать вызовы подпрограмм, которые вы не импортировали в свое пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...