modules mcpan library perl perl-module

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; }