W Perlu do ładowania modułów używa się dwóch podstawowych operatorów — use i require.
use — Ładowanie modułu na etapie kompilacji. Wykonywane natychmiast przy odczycie pliku perl, ładowanie modułu do zasięgu i wywołanie metody import (jeśli istnieje).
require — Wykonuje ładowanie modułu w czasie wykonywania (run-time).
require $some_module;).Przykład:
use MyModule; # czas kompilacji; wywołuje import require 'MyModule.pm'; # czas wykonywania; bez importu
Czy można użyć
usez zmienną nazwą modułu, na przykładuse $module_name;?
Odpowiedź: Nie. Operator use wymaga statycznie znanego nazwy modułu podczas kompilacji, podczas gdy require nadaje się do zmiennych nazw.
Przykład:
my $module = 'Some::Plugin'; require $module; $module->import();
Historia
Projekt napisany z dużą ilością dynamicznie ładowanych pluginów. Jeden z deweloperów błędnie użył 'use $plugin', co spowodowało błąd kompilacji. Później okazało się, że ładowanie jest możliwe tylko przez require, a następnie wywołanie import.
Historia
W dużej usłudze Perl część bibliotek była ładowana przez 'require', bez wywołania import. Zmienne i funkcje, na które liczono, nie zostały załadowane do przestrzeni nazw, co spowodowało błędy undefined subroutine.
Historia
Programista próbował załadować dużą blok kodu wewnątrz funkcji przez 'use', licząc, że moduł załaduje się tylko w razie potrzeby, ale w praktyce moduł załadował się już na starcie, co doprowadziło do niepotrzebnego zużycia pamięci.