Standardową praktyką jest zwykle używanie use
, require
i do
.
do 'file'
wykona file
jako skrypt Perla. To prawie jak wywoływanie eval
na zawartości pliku; jeśli będziesz ten sam plik kilka razy (np. w pętli), będzie on analizowany i analizowany za każdym razem, co jest mało prawdopodobne, aby było to, co chcesz. Różnica między do
ipolega na tym, że do
nie widzi zmiennych leksykalnych w otaczającym zakresie, co czyni go bezpieczniejszym. do
jest czasami przydatny do prostych zadań, takich jak przetwarzanie pliku konfiguracyjnego zapisanego w postaci kodu Perla.
require 'file'
jest jak do 'file'
z tym wyjątkiem, że analizuje tylko jeden określony plik jeden raz i zgłosi wyjątek, jeśli coś pójdzie nie tak. (np. plik nie może zostać znaleziony, zawiera błąd składni itp.) Automatyczne sprawdzanie błędów sprawia, że jest on dobrym zamiennikiem dla do 'file'
, ale nadal nadaje się tylko do tych samych prostych zastosowań.
Formularze do 'file'
i require 'file'
przenoszą się z poprzednich dni, kiedy rozszerzenie pliku * .pl oznaczało "Biblioteka Perla". Nowoczesny sposób ponownego wykorzystania kodu w Perlu polega na uporządkowaniu go w moduły. Nazwanie czegoś "modułem" zamiast "biblioteki" jest po prostu semantyką, ale słowa oznaczają wyraźnie różne rzeczy w kulturze Perla. Biblioteka to tylko zbiór podprogramów; moduł zapewnia przestrzeń nazw, dzięki czemu jest bardziej odpowiedni do ponownego użycia.
use Module
to normalny sposób użycia kodu z modułu. Zauważ, że Module
to nazwa pakietu jako bareword, a nie cytowany ciąg zawierający nazwę pliku. Perl obsługuje tłumaczenie z nazwy pakietu na nazwę pliku. use
instrukcje występują w czasie kompilacji i generują wyjątek, jeśli się nie powiedzie. Oznacza to, że jeśli moduł, od którego twój kod jest zależny, nie jest dostępny lub nie załaduje się, błąd będzie widoczny natychmiast. Dodatkowo, use
automatycznie wywołuje metodę import()
modułu, jeśli ma taką, która może zaoszczędzić ci trochę pisania.
require Module
jest podobny do use Module
, z tym że dzieje się w czasie wykonywania i nie wywołuje automatycznie metody modułu import()
. Zwykle chcesz użyć use
, aby wcześnie i przewidywalnie przestać działać, ale czasami lepiej jest require
. Na przykład: require
może być użyty do opóźnienia ładowania dużych modułów, które są tylko sporadycznie wymagane lub do opcjonalnego modułu. (użyj modułu, jeśli jest dostępny, ale cofnij się do czegoś innego lub zmniejsz funkcjonalność, jeśli tak nie jest).
Ściśle mówiąc, jedyną różnicą między require Module
a require 'file'
jest to, że pierwsza forma uruchamia automatyczne tłumaczenie z paczki o nazwie takiej jak Foo::Bar
do nazwy pliku, takiej jak Foo/Bar.pm
, podczas gdy druga forma oczekuje nazwy pliku. Zgodnie z konwencją pierwsza forma jest używana do ładowania modułów, podczas gdy druga forma służy do ładowania bibliotek.
Czy chodziło ci o 'require Module' lub może' do "file" 'zamiast' require "file" '? –
@Michael, 'require" plik "' faktycznie używa 'do" pliku '' do przetwarzania jego arugment, ale będzie działać tylko na danym pliku jeden raz. – daotoad
@daotoad: Nie o to pytałem. Zazwyczaj 'do' jest używane dla plików * .pl, podczas gdy' require' jest używane dla plików * .pm. Oczywiście rozszerzenie pliku nie ma znaczenia, ale zgodnie z konwencją * .pl przez długi czas nie oznaczało "biblioteki perla". Próbowałem wyjaśnić, czy odnosiłeś się do starego użycia, czy też pytanie powinno zostać zmodyfikowane, aby odzwierciedlić trzy sposoby ładowania kodu zewnętrznego ('use',' require' i 'do'). W sensie bardziej sensownym (do mnie) byłoby uwzględnienie wszystkich trzech form w dyskusji. –