next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Formato de uso de Sup: Uso del Módulo de Ant: Uso del Módulo de Err: Si hallas una errata ...

Ejemplo de uso

Reescribamos el módulo del ejemplo anterior en un nuevo módulo HopsExport:

package Modexample::HopsExport;
use Exporter;

@ISA = ('Exporter');
@EXPORT = qw(&hop_along);

sub hop_along {
  my ($from, $to, $step) = @_;
  my $next = $from-$step;  # incializar contador
  my $closure_ref = sub {
    $next += $step;
    return if $next > $to;
    $_[0] =$next;
    return 1;
  };
  return $closure_ref;
}

1;

El módulo Exporter es el encargado de administrar la interfase pública del módulo. La inicialización del vector especial @ISA hace que el módulo Modexample::HopsExport ``herede'' del módulo Exporter los métodos que nos hacen falta como import. Aún cuando no hemos visto objetos, puede dar una ojeada a la sección 7.6 que trata sobre la herencia. El método import que proporciona Exporter examina la lista en @EXPORT para determinar que variables se exportan por defecto. ¿Como hacer si tenemos rutinas que no queremos que forme parte de la exportación por defecto pero que estén disponibles en caso de que se soliciten explícitamente? La alternativa es escribir los nombres de esos objetos en la lista @EXPORT_OK.

La línea de asignación a la variable @EXPORT hace que se cree un alias para la función hop_along en el programa cliente. De este modo no es necesario llamar a la función por su nombre completo Modexample::HopsExport::hop_along sino simplemente hop_along.

#!/usr/bin/perl -w -I. 
use Modexample::HopsExport;

$row = hop_along 1, 5, 1;
while ($row->($r)) {
  $col = hop_along 1, 5, 1;
  while ($col->($c)) {
    print("($r, $c)\t");
  }
  print "\n";
}

Veamos otro ejemplo. Supongamos el módulo:

package Trivial::Tutu;
our @EXPORT = qw(uno dos);
our @EXPORT_OK = qw(tres cuatro cinco);
use Exporter;
our @ISA = qw(Exporter);

Los siguientes ejemplos ilustran el modo de uso de la exportación:

Observe que un programa cliente siempre puede acceder a un símbolo del módulo, incluso si no figura como símbolo exportable, sin mas que escribir su nombre completo (por ejemplo Trivial::Tutu::siete).


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Formato de uso de Sup: Uso del Módulo de Ant: Uso del Módulo de Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21