Jaka jest różnica między .pm(modułem Perla) a .pl(skryptem Perla) plikiem?
Proszę również powiedzieć, dlaczego wracamy 1z akt. Jeśli zwraca 2 lub cokolwiek innego, to nie generuje żadnego błędu, więc dlaczego wracamy 1z modułu Perla?
Jaka jest różnica między .pm(modułem Perla) a .pl(skryptem Perla) plikiem?
Proszę również powiedzieć, dlaczego wracamy 1z akt. Jeśli zwraca 2 lub cokolwiek innego, to nie generuje żadnego błędu, więc dlaczego wracamy 1z modułu Perla?
Odpowiedzi:
Zasadniczo rozszerzenie pliku, którego używasz, nie ma znaczenia, jak perlinterpretuje te pliki.
Jednak umieszczanie modułów w .pmplikach zgodnie z określoną strukturą katalogów zgodną z nazwą pakietu zapewnia wygodę. Tak więc, jeśli masz moduł Example::Plot::FourDi umieścisz go w katalogu Example/Plot/FourD.pmw ścieżce w swoim @INC, wtedy usei requirezrobisz właściwą rzecz, gdy podasz nazwę pakietu, jak w use Example::Plot::FourD.
Plik musi zwracać true jako ostatnią instrukcję wskazującą pomyślne wykonanie dowolnego kodu inicjującego, więc zwyczajowo kończy się taki plik,
1;chyba że masz pewność, że w przeciwnym razie zwróci on wartość true. Ale lepiej jest po prostu wstawić1;, na wypadek gdybyś dodał więcej stwierdzeń.Jeśli
EXPRjest to zwykłe słowo,requirezakłada rozszerzenie „.pm” i zastępuje „::” w nazwie pliku „/”, aby ułatwić ładowanie standardowych modułów. Ta forma ładowania modułów nie powoduje ryzyka zmiany przestrzeni nazw.
Wystarczy znaleźć usenazwę pliku z podanej nazwy pakietu, umieścić requireją w BEGINbloku i wywołać importna pakiecie. Nic nie stoi na przeszkodzie, abyś nie używał, useale wykonał te kroki ręcznie.
Na przykład poniżej umieściłem Example::Plot::FourDpaczkę w pliku o nazwie t.pl, załadowałem ją w skrypcie w pliku s.pl.
C:\Temp> cat t.pl
package Example::Plot::FourD;
use strict; use warnings;
sub new { bless {} => shift }
sub something { print "something\n" }
"Example::Plot::FourD"
C:\Temp> cat s.pl
#!/usr/bin/perl
use strict; use warnings;
BEGIN {
require 't.pl';
}
my $p = Example::Plot::FourD->new;
$p->something;
C:\Temp> s
something
Ten przykład pokazuje, że pliki modułów nie muszą kończyć się na 1, wystarczy każda wartość true.
A .pl to pojedynczy skrypt.
W .pm ( module Perla ) masz funkcje, których możesz używać z innych skryptów Perla:
Moduł Perla to samodzielny fragment kodu Perla, który może być używany przez program w Perlu lub przez inne moduły Perla. Koncepcyjnie jest podobny do biblioteki łączonej C lub klasy C ++.
1nie ma znaczenia. Może być2,"foo"może być["a", "list"]. Liczy się to, że nie jest to0ani cokolwiek innego, co ocenia się jako fałszywe lubusezawodzi.