Do organizacji kodu w Perl używa się modułów (packages), które są zapisane w oddzielnych plikach z rozszerzeniem .pm.
use (na etapie kompilacji) i require (na etapie wykonania).@INC — jest to lista katalogów, w których Perl szuka modułów.Przykład modułu:
Foo.pm
package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;
Podłączenie i użycie:
use lib '.'; # Dodaje bieżący folder do @INC use Foo; Foo::say_hello(); # Wyświetla: Hello from Foo!
Główne różnice:
use importuje moduł na początku wykonania skryptu i automatycznie wywołuje metodę import, jeśli takowa istnieje.require ładował moduł tylko przy pierwszym wywołaniu.Jaka jest różnica między use a require? Kiedy używać którego operatora?
Odpowiedź:
use— działa na etapie kompilacji, automatycznie wywołujeimport(zazwyczaj stosowane dla modułów).require— działa w czasie wykonywania, potrzebne, gdy nazwa modułu jest nieznana przed wykonaniem lub gdy nie zawsze trzeba go podłączać.
Historia
W dużym projekcie podłączono własną bibliotekę przez
require, zapominając, że używa ona funkcji eksportowanych. Używana funkcja nie została wyeksportowana, ponieważrequirenie wywołujeimport. Wynik — nie działa import symboli, trzeba wywoływać funkcje jawnie.
Historia
Podczas przenoszenia modułu do oddzielnego folderu zapomniano dodać ścieżkę do folderu przez
use liblub zmienić zmienną@INC. Moduł nie był znajdowany, skrypt kończył się błędem, mimo że plik znajdował się we właściwym miejscu względem projektu.
Historia
W starym aplikacji nazwano moduł małą literą, a podłączono przez use z wielką:
use foo;zamiastuse Foo;. Perl nie znalazł modułu, co spowodowało zakłócenie działania krytycznych części aplikacji.