library - perl mcpan
¿Qué significa "1" en Perl? (7)
Cuando carga un módulo "Foo" con el use Foo
o require()
, perl ejecuta el archivo Foo.pm
como un script ordinario. Espera que devuelva un valor verdadero si el módulo se cargó correctamente. El 1;
hace eso. Podría ser 2;
o "hey there";
igual de bien.
El bloque alrededor de la declaración de $somevar
y la función Somesub
limita el alcance de la variable. De esta forma, solo se puede acceder desde Somesub
y no se borra en cada invocación de Somesub
(que sería el caso si se declarara dentro del cuerpo de la función). Este modismo ha sido reemplazado en versiones recientes de perl (5.10 y posteriores) que tienen la palabra clave state .
He encontrado algunos módulos de Perl que, por ejemplo, se parecen al siguiente código:
package MyPackage;
use strict;
use warnings;
use constant PERL510 => ( $] >= 5.0100 );
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( );
{ #What is the significance of this curly brace?
my $somevar;
sub Somesub {
#Some code here
}
}
1;
¿Cuál es el significado de 1;
y de las llaves que encierran el $somevar
y el Sub?
De la documentación require :
El archivo debe devolver verdadero como la última instrucción para indicar la ejecución exitosa de cualquier código de inicialización, por lo que es habitual finalizar dicho archivo con 1; a menos que esté seguro de que volverá a ser cierto de lo contrario. Pero es mejor poner el 1; , en caso de que agregue más declaraciones.
Las llaves combinan el alcance de la variable local $ somevar:
{my $ somevar; ...} # $ el alcance de somevar termina aquí
Los módulos de Perl deben devolver algo que se evalúe como verdadero. Si no lo hacen, Perl informa un error.
C:/temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test/n"; }
#1; # commented out to show error
C:/temp>perl -e "use MyTest"
MyTest.pm did not return a true value at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
C:/temp>
Aunque es habitual usar "1", todo lo que se evalúe como verdadero funcionará.
C:/temp>cat MyTest.pm
package MyTest;
use strict;
sub test { print "test/n"; }
"false";
C:/temp>perl -e "use MyTest"
C:/temp> (no error here)
Por razones obvias, otro valor de retorno popular es 42 .
Hay una lista de valores de retorno interesantes mantenidos en http://returnvalues.useperl.at/values.html .
Los módulos tienen que devolver un valor verdadero. 1
es un verdadero valor.
No sé mucho sobre Perl, pero generalmente creas un ámbito usando llaves. Probablemente $ somevar no estará disponible globalmente?
1
al final de un módulo significa que el módulo devuelve true
para use/require
declaraciones. Se puede usar para decir si la inicialización del módulo fue exitosa. De lo contrario, use/require
fallará.
$somevar
es una variable que solo se puede acceder dentro del bloque. Se usa para simular variables "estáticas". A partir de Perl 5.10 puede usar la palabra clave de state
palabras clave para obtener los mismos resultados:
## Starting from Perl 5.10 you can specify "static" variables directly.
sub Somesub {
state $somevar;
}