В Perl для подключения модулей используют два основных оператора — use и require.
use — Подключает модуль на этапе компиляции. Выполняется сразу при чтении файла perl, подгружает модуль в область видимости и вызывает метод import (если он есть).
require — Выполняет загрузку модуля во время выполнения (run-time).
require $some_module;).Пример:
use MyModule; # compile-time; calls import require 'MyModule.pm'; # run-time; no import
Можно ли использовать
useс переменным именем модуля, например,use $module_name;?
Ответ: Нет. Оператор use требует статически известного имени модуля во время компиляции, тогда как require годится для переменных имён.
Пример:
my $module = 'Some::Plugin'; require $module; $module->import();
История
Проект написан с большим количеством динамически подключаемых плагинов. Один из разработчиков ошибочно использовал 'use $plugin', что вызвало ошибку компиляции. Позже выяснилось, что подгрузка возможна только через require, и только затем вызов import.
История
В крупном Perl-сервисе часть библиотек подгружалась через 'require', без вызова import. Переменные и функции, на которые рассчитывали, не были импортированы в пространство имён, и код начал завершаться ошибками undefined subroutine.
История
Разработчик попробовал подключать большой блок кода внутри функции через 'use', рассчитывая, что модуль загрузится только при необходимости, но на практике модуль подхватился еще на старте, что привело к ненужному расходу памяти.