Perl eval ('use someModule;') вызывается несколько раз.Это также оценивается несколько раз? - PullRequest
0 голосов
/ 22 октября 2018

Мне приходится иметь дело с кодом кода, который использует

eval('use someModule');

в функции и уничтожает модуль во время выполнения.

К сожалению, функция с этим блоком eval вызывается несколько раз,Теперь вопрос - оценивает ли Perl модуль каждый раз, когда вызывается функция с этим блоком?- Или Perl достаточно умен, чтобы пропустить второй тест?И есть ли способ измерить это, чтобы быть уверенным?

Я пробовал какой-то глобальный подсчет переменных в блоке BEGIN модуля, но я не уверен, что это достаточный тест.

1 Ответ

0 голосов
/ 22 октября 2018
use someModule

эквивалентно:

BEGIN { require someModule; someModule->import(); }

и require требует, чтобы файл библиотеки был включен, если он еще не был включен.

Таким образом, someModule будет прочитан и скомпилирован только один раз, но его import sub (если есть) будет вызываться один раз для каждого use.

...