• Publicidad

Creación de módulo

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Creación de módulo

Notapor danimera » 2006-08-13 02:15 @135

Código: Seleccionar todo
package MyModule;

use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);

$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = ();
@EXPORT_OK   = qw(func1 func2);
%EXPORT_TAGS = ( DEFAULT => [qw(&func1)],
                 Both    => [qw(&func1 &func2)]);

sub func1  { return reverse @_  }
sub func2  { return map{ uc }@_ }

1;


Estoy decidiendo hacer un modulo y no se si sea correcto hacer lo que pongo arriba, bueno igual funciona, pero podría explicarme explorer que hacen las lineas,
Código: Seleccionar todo
Use vars qw( etc........
y las diferencias de
Código: Seleccionar todo
@EXPORT_OK   = qw(func1 func2);
y
Código: Seleccionar todo
 %EXPORT_TAGS = ( DEFAULT => [qw(&func1)],
                 Both    => [qw(&func1 &func2)]);
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Notapor explorer » 2006-08-13 07:12 @341

use vars sirve para declarar variables globales que serán efectivas a lo largo de todo el fichero en donde aparecen, a diferencia de our cuyo ámbito es el paquete.

El primer EXPORT_OK indica qué símbolos pueden ser exportados por decisión del usuario, mientras que EXPORT_TAG sirve para agrupar conjuntos de variables que pueden ser exportadas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-08-13 12:17 @553

Hola:

Deja te pongo algunos ejemplos para hacer más claros las variables de EXPORT que te explicó explorer.

Dígamos que en tu módulo tengas la variable @export así:
Código: Seleccionar todo
@EXPORT = qw( mi_funcion );


Entonces en tu script de Perl puedes hacer lo siguiente:
Código: Seleccionar todo
use MiModulo; #Cargas tu módulo

mi_funcion(); #Llamas a la función en el módulo


Entonces la variable @EXPORT exporta de manera automática lo que le pongas.

Ahora, con el @EXPORT_OK:
Código: Seleccionar todo
@EXPORT_OK = qw( otra_funcion );


Entonces en tu script harías algo así:
Código: Seleccionar todo
use MiModulo qw( otra_funcion );

otra_funcion();


Con el @EXPORT_OK especificamos todo aquello que está permitido exportar, pero del lado del importador (el script) lo debe de poner de manera explícita.

Ahora, los %EXPORT_TAGS te permiten hacer listas de funciones de exportación, así podrías, por ejemplo, cargar un módulo con las puras funciones más simples, o con todo:
Código: Seleccionar todo
%EXPORT_TAGS = (
                             DEFAULT => [qw(funcionA funcion B)],
                                Simple => [qw(funcionA)]
                             );


Entonces en tu script podrías hacer algo así al cargar el módulo:
Código: Seleccionar todo
use MiModulo qw(:DEFAULT);

use MiModulo qw(:Simple);


Dependiendo de la lista que decidas cargar son las funciones que tendrás disponibles. Ahora, puedes optar por cargar varias listas a la vez:
Código: Seleccionar todo
use MiModulo qw(:DEFAULT :Simple :Otro);


En el siguiente link puedes encontrar información más detallada de todo lo que aquí pongo, así como más opciones:
http://perldoc.perl.org/Exporter.html#How-to-Export

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor danimera » 2006-08-13 19:53 @870

Asi de sencillo es este cuento, es decir que despues de cargar el modulo puedo llamar la funcion comun y corriente.

Gracias por colaborarme veo que no es tan complicado, bueno con esta explicacion puedo ver el funciomiento real de esto
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados