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?
perl
perl-module
user380979
źródło
źródło
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.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 kataloguExample/Plot/FourD.pm
w ścieżce w swoim@INC
, wtedyuse
irequire
zrobisz właściwą rzecz, gdy podasz nazwę pakietu, jak wuse Example::Plot::FourD
.Wystarczy znaleźć
use
nazwę pliku z podanej nazwy pakietu, umieścićrequire
ją wBEGIN
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 nazwiet.pl
, załadowałem ją w skrypcie w plikus.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.źródło
A .pl to pojedynczy skrypt.
W .pm ( module Perla ) masz funkcje, których możesz używać z innych skryptów Perla:
źródło