Qual è la differenza tra file .pm
(Perl module) e .pl
(Perl script)?
Per favore dimmi anche perché torniamo 1
dal file. Se restituisce 2 o qualsiasi altra cosa, non sta generando alcun errore, quindi perché torniamo 1
dal modulo Perl?
Qual è la differenza tra file .pm
(Perl module) e .pl
(Perl script)?
Per favore dimmi anche perché torniamo 1
dal file. Se restituisce 2 o qualsiasi altra cosa, non sta generando alcun errore, quindi perché torniamo 1
dal 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 .pm
file seguendo una determinata struttura di directory che segue il nome del pacchetto fornisce una comodità. Quindi, se hai un modulo Example::Plot::FourD
e lo metti in una directory Example/Plot/FourD.pm
in un percorso nel tuo @INC
, allora use
e require
farà 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,require
assume 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 use
fa è capire il nome del file dal nome del pacchetto fornito, require
in un BEGIN
blocco e invocare import
sul pacchetto. Non c'è nulla che ti impedisca di non utilizzare use
ma di eseguire manualmente questi passaggi.
Ad esempio, di seguito ho inserito il Example::Plot::FourD
pacchetto 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 ++.
1
non importa. Può essere2
, può essere"foo"
, può essere["a", "list"]
. Ciò che conta è che non lo è0
o qualsiasi altra cosa che venga valutata come falsa ouse
fallirebbe.