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

Это похоже на проблему с текущей сборкой Xcode и iOS 7.

Некоторый связанный контент на форумах разработчиков Apple находится в поиске UIStatusBarStyleLightContent в «iOS 7 Beta Livability» на форумах разработчиков Apple * (в настоящее время 32 сообщения).

Я наткнулся на это, пытаясь установить его на облегченную версию.

(Это просто продолжение ответа Аарона.)

27
задан Sinan Ünür 21 July 2009 в 22:39
поделиться

4 ответа

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

use ModuleName;

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

BEGIN {
    require ModuleName;
    ModuleName->import;
}

BEGIN ] заставляет этот код запускаться, как только его видит синтаксический анализатор. требует загружает модуль или кристалл пытается. Затем вызывается функция import модуля. Функция import может делать все, что угодно, но обычно она загружает функции в пространство имен, которые используют d it (часто с модулем Exporter ).

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

use ModuleName ();

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

BEGIN {
    require ModuleName;
}
30
ответ дан 28 November 2019 в 04:42
поделиться

Из perldoc -q «разница между требованием и использованием» :

использование модуля похоже на требует модуля , за исключением того, что используют

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

4.2: импортирует символы и семантику из этого пакета в текущий.

17
ответ дан 28 November 2019 в 04:42
поделиться

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

C: \> perldoc -f require

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

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

C: \> perldoc -f use

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

 BEGIN {require Module; Модуль-> импорт (СПИСОК); }

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

... и т. Д.

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

10
ответ дан 28 November 2019 в 04:42
поделиться

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

7
ответ дан 28 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: