Jaka jest różnica między .pm
(modułem Perla) a .pl
(skryptem Perla) plikiem?
Proszę również powiedzieć, dlaczego wracamy 1
z akt. Jeśli zwraca 2 lub cokolwiek innego, to nie generuje żadnego błędu, więc dlaczego wracamy 1
z modułu Perla?
Jaka jest różnica między .pm
(modułem Perla) a .pl
(skryptem Perla) plikiem?
Proszę również powiedzieć, dlaczego wracamy 1
z akt. Jeśli zwraca 2 lub cokolwiek innego, to nie generuje żadnego błędu, więc dlaczego wracamy 1
z modułu Perla?
Odpowiedzi:
Zasadniczo rozszerzenie pliku, którego używasz, nie ma znaczenia, jak perl
interpretuje te pliki.
Jednak umieszczanie modułów w .pm
plikach zgodnie z określoną strukturą katalogów zgodną z nazwą pakietu zapewnia wygodę. Tak więc, jeśli masz moduł Example::Plot::FourD
i umieścisz go w katalogu Example/Plot/FourD.pm
w ścieżce w swoim @INC
, wtedy use
i require
zrobisz 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
EXPR
jest to zwykłe słowo,require
zakł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źć use
nazwę pliku z podanej nazwy pakietu, umieścić require
ją w BEGIN
bloku i wywołać import
na pakiecie. Nic nie stoi na przeszkodzie, abyś nie używał, use
ale wykonał te kroki ręcznie.
Na przykład poniżej umieściłem Example::Plot::FourD
paczkę 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 ++.
1
nie ma znaczenia. Może być2
,"foo"
może być["a", "list"]
. Liczy się to, że nie jest to0
ani cokolwiek innego, co ocenia się jako fałszywe lubuse
zawodzi.