Jaka jest różnica między plikiem .pm (moduł Perla) a .pl (skryptem Perla) w Perlu?

88

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?

user380979
źródło
11
1nie ma znaczenia. Może być 2, "foo"może być ["a", "list"]. Liczy się to, że nie jest to 0ani cokolwiek innego, co ocenia się jako fałszywe lub usezawodzi.
Amadan
.pl jest właściwie biblioteką perla - skrypty perla, takie jak programy C lub programy napisane w innych językach, nie mają końcówki, z wyjątkiem systemów operacyjnych, które wymagają jej działania, takich jak okna.
Pamiętaj o Monice z

Odpowiedzi:

78

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.

Sinan Ünür
źródło
-2

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 ++.

Igor Oks
źródło
5
„A .pl to pojedynczy skrypt”. Nie prawda. Tylko w zepsutych systemach operacyjnych musisz zidentyfikować programy Perla z rozszerzeniem .pl. Pierwotnie .pl wskazywał na „bibliotekę Perla” - zewnętrzne podprogramy, które ładowałeś poleceniem „require” lub „do”.
Dave Cross