¿Cuál es la diferencia entre .pm
(módulo Perl) y .pl
archivo (script Perl)?
Por favor, dígame también por qué regresamos 1
del archivo. Si devuelve 2 o cualquier otra cosa, no genera ningún error, entonces, ¿por qué regresamos 1
del módulo Perl?
perl
perl-module
user380979
fuente
fuente
1
No importa. Puede ser2
, puede ser"foo"
, puede ser["a", "list"]
. Lo que importa es que no lo es0
, o cualquier otra cosa que se evalúe como falsa ouse
fallaría.Respuestas:
En esencia, la extensión de archivo que use no hace ninguna diferencia en cuanto a cómo
perl
interpretar esos archivos.Sin embargo, colocar módulos en
.pm
archivos siguiendo una determinada estructura de directorio que sigue al nombre del paquete proporciona una comodidad. Entonces, si tiene un móduloExample::Plot::FourD
y lo coloca en un directorioExample/Plot/FourD.pm
en una ruta en su@INC
, entoncesuse
yrequire
hará lo correcto cuando le den el nombre del paquete como enuse Example::Plot::FourD
.Todo lo que
use
hace es averiguar el nombre del archivo a partir del nombre del paquete proporcionado,require
colocarlo en unBEGIN
bloque e invocarloimport
en el paquete. No hay nada que le impida no usar,use
sino tomar esos pasos manualmente.Por ejemplo, a continuación puse el
Example::Plot::FourD
paquete en un archivo llamadot.pl
, lo cargué en un script en archivos.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
Este ejemplo muestra que los archivos de módulo no tienen que terminar en
1
, cualquier valor verdadero servirá.fuente
Un .pl es un único script.
En .pm ( Módulo Perl ) tiene funciones que puede usar desde otros scripts Perl:
fuente