Qual è la differenza tra file .pm(Perl module) e .pl(Perl script)?
Per favore dimmi anche perché torniamo 1dal file. Se restituisce 2 o qualsiasi altra cosa, non sta generando alcun errore, quindi perché torniamo 1dal modulo Perl?
Qual è la differenza tra file .pm(Perl module) e .pl(Perl script)?
Per favore dimmi anche perché torniamo 1dal file. Se restituisce 2 o qualsiasi altra cosa, non sta generando alcun errore, quindi perché torniamo 1dal modulo Perl?
Risposte:
In fondo, l'estensione del file che usi non fa differenza su come perl interpreta quei file.
Tuttavia, l'inserimento di moduli nei .pmfile seguendo una determinata struttura di directory che segue il nome del pacchetto fornisce una comodità. Quindi, se hai un modulo Example::Plot::FourDe lo metti in una directory Example/Plot/FourD.pmin un percorso nel tuo @INC, allora usee requirefarà la cosa giusta quando gli viene dato il nome del pacchetto come in use Example::Plot::FourD.
Il file deve restituire true come ultima istruzione per indicare l'esecuzione corretta di qualsiasi codice di inizializzazione, quindi è consuetudine terminare un file di questo tipo con a
1;meno che non si sia sicuri che restituirà true altrimenti. Ma è meglio mettere solo il1;, nel caso in cui si aggiungano più dichiarazioni.Se
EXPRè una parola semplice,requireassume un'estensione ".pm" e sostituisce "::" con "/" nel nome del file, per facilitare il caricamento dei moduli standard. Questa forma di caricamento dei moduli non rischia di alterare il tuo spazio dei nomi.
Tutto quello che usefa è capire il nome del file dal nome del pacchetto fornito, requirein un BEGINblocco e invocare importsul pacchetto. Non c'è nulla che ti impedisca di non utilizzare usema di eseguire manualmente questi passaggi.
Ad esempio, di seguito ho inserito il Example::Plot::FourDpacchetto in un file chiamato t.pl, l'ho caricato in uno script in file 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
Questo esempio mostra che i file del modulo non devono terminare con 1, qualsiasi valore vero andrà bene.
Un .pl è un singolo script.
In .pm ( Perl Module ) hai funzioni che puoi usare da altri script Perl:
Un modulo Perl è un pezzo autonomo di codice Perl che può essere utilizzato da un programma Perl o da altri moduli Perl. È concettualmente simile a una libreria di collegamento C o una classe C ++.
1non importa. Può essere2, può essere"foo", può essere["a", "list"]. Ciò che conta è che non lo è0o qualsiasi altra cosa che venga valutata come falsa ousefallirebbe.