In Perl worden twee hoofdoperatoren gebruikt voor het laden van modules: use en require.
use — Laadt de module tijdens de compileertijd. Dit gebeurt onmiddellijk bij het lezen van het perl-bestand, het laadt de module in de scope en roept de methode import aan (indien aanwezig).
require — Laadt de module tijdens de uitvoering (run-time).
require $some_module;).Voorbeeld:
use MyModule; # compile-time; roept import aan require 'MyModule.pm'; # run-time; geen import
Kan men
usegebruiken met een variabel module-naam, bijvoorbeeld,use $module_name;?
Antwoord: Nee. De operator use vereist een statisch bekende module-naam tijdens de compileertijd, terwijl require geschikt is voor variabele namen.
Voorbeeld:
my $module = 'Some::Plugin'; require $module; $module->import();
Verhaal
Het project is geschreven met een groot aantal dynamisch geladen plugins. Een van de ontwikkelaars gebruikte per ongeluk 'use $plugin', wat leidde tot een compile-fout. Later bleek dat laden alleen mogelijk is via require, en pas daarna kan import worden aangeroepen.
Verhaal
In een grote Perl-service werden sommige bibliotheken geladen via 'require', zonder import aanroep. De variabelen en functies waarop vertrouwd werd, werden niet geïmporteerd in de namespace, en de code begon te falen met undefined subroutine fouten.
Verhaal
Een ontwikkelaar probeerde een groot blok code binnen een functie te laden via 'use', in de veronderstelling dat de module alleen wanneer nodig zou worden geladen, maar in de praktijk werd de module al bij de start geladen, wat leidde tot onnodig geheugengebruik.