use
эквивалентно BEGIN { require Module; Module->import( LIST ); }
Итак, главное отличие в том, что:
Использование используется во время компиляции
Использовать автоматически вызовы подпрограммы импорта (которая может делать что угодно , но в основном используется для экспорта идентификаторов в пространство имен вызывающего абонента)
использовать штампы, если модуль не может быть загружен (отсутствует / ошибка компиляции)
Как таковые:
Когда вам нужно загрузить модули динамически (например, определить, какой модуль загружать на основе аргументов командной строки), используйте require
.
В общем, когда вам необходимо точно контролировать, когда загружен модуль, используйте require
(use
загрузит модуль сразу после предыдущего блока use
или BEGIN
, в время компиляции ).
Если вам нужно как-то обойти подпрограмму вызывающего модуля import()
, используйте require
Когда вам нужно сделать что-то умное для обработки ошибок загрузки (отсутствующий модуль, модуль не может скомпилироваться), вы можете заключить require
в оператор eval { }
, так что вся программа не ' просто умереть
Вы можете смоделировать это с помощью use
, но довольно изящными способами (должен срабатывать захват сигнала die
в раннем блоке BEGIN
). Но eval { require }
лучше.
Во всех ДРУГИХ случаях используйте use
Я не покрывал AUTOLOAD, потому что это другая зверька. Он используется в тех случаях, когда вы хотите прерывать вызовы подпрограмм, которые вы не импортировали в свое пространство имен.