¿Cuál es la diferencia entre .pm(módulo Perl) y .plarchivo (script Perl)?
Por favor, dígame también por qué regresamos 1del archivo. Si devuelve 2 o cualquier otra cosa, no genera ningún error, entonces, ¿por qué regresamos 1del módulo Perl?
¿Cuál es la diferencia entre .pm(módulo Perl) y .plarchivo (script Perl)?
Por favor, dígame también por qué regresamos 1del archivo. Si devuelve 2 o cualquier otra cosa, no genera ningún error, entonces, ¿por qué regresamos 1del módulo Perl?
Respuestas:
En esencia, la extensión de archivo que use no hace ninguna diferencia en cuanto a cómo perlinterpretar esos archivos.
Sin embargo, colocar módulos en .pmarchivos siguiendo una determinada estructura de directorio que sigue al nombre del paquete proporciona una comodidad. Entonces, si tiene un módulo Example::Plot::FourDy lo coloca en un directorio Example/Plot/FourD.pmen una ruta en su @INC, entonces usey requirehará lo correcto cuando le den el nombre del paquete como en use Example::Plot::FourD.
El archivo debe devolver verdadero como la última declaración para indicar la ejecución exitosa de cualquier código de inicialización, por lo que es habitual terminar dicho archivo con a
1;menos que esté seguro de que devolverá verdadero de lo contrario. Pero es mejor poner el1;, en caso de que agregue más declaraciones.Si
EXPRes una palabra básica,requireasume una extensión ".pm" y reemplaza "::" con "/" en el nombre del archivo para que sea más fácil cargar módulos estándar. Esta forma de carga de módulos no corre el riesgo de alterar su espacio de nombres.
Todo lo que usehace es averiguar el nombre del archivo a partir del nombre del paquete proporcionado, requirecolocarlo en un BEGINbloque e invocarlo importen el paquete. No hay nada que le impida no usar, usesino tomar esos pasos manualmente.
Por ejemplo, a continuación puse el Example::Plot::FourDpaquete en un archivo llamado t.pl, lo cargué en un script en archivo 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
Este ejemplo muestra que los archivos de módulo no tienen que terminar en 1, cualquier valor verdadero servirá.
Un .pl es un único script.
En .pm ( Módulo Perl ) tiene funciones que puede usar desde otros scripts Perl:
Un módulo Perl es una pieza autónoma de código Perl que puede ser utilizado por un programa Perl o por otros módulos Perl. Es conceptualmente similar a una biblioteca de enlaces C o una clase C ++.
1No 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 ousefallaría.