Подтвердить что ты не робот

В Perl, в чем разница между использованием и требованием для загрузки модуля?

В чем разница между выполнением use My::Module и require My::Module?

4b9b3361

Ответ 1

Функция use:

use ModuleName;

эквивалентен следующему коду с помощью функции require:

BEGIN {
    require ModuleName;
    ModuleName->import;
}

Блок BEGIN заставляет этот код запускаться, как только синтаксический анализатор видит его. require загружает модуль или die пытается. И затем вызывается функция import модуля. Функция import может делать всевозможные вещи, но для нее обычно загружать функции в пространство имен, которое use d (часто с Exporter).

Важно отметить, что импорт не будет вызываться в этом случае:

use ModuleName ();

В этом случае он эквивалентен

BEGIN {
    require ModuleName;
}

Ответ 3

Perl поставляется с отличной документацией. Каждому было бы полезно прочитать всю документацию не реже одного раза в несколько месяцев.

C:\> perldoc -f require

В противном случае require требует, чтобы файл библиотеки если он еще не был включен. Файл включен через do-FILE, который по существу, всего лишь множество с оговоркой, что лексические переменные в вызывающем script будет невидимый для включенного кода. имеет семантика, подобная следующей Подпрограмма:

... и т.д. Аналогично,

C:\> perldoc -f use

Импортирует некоторую семантику в текущий пакет от именованного модуля, обычно путем наложения определенных подпрограммы или имена переменных в пакет. Это в точности эквивалентно

BEGIN { require Module; Module->import( LIST ); }

за исключением того, что модуль должен быть дельным.

... и т.д.

Существует также запись perlfaq, хотя я думаю, что она менее информативна, чем предыдущая.

Ответ 4

use выполняется во время компиляции, а require работает во время выполнения.