next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Acceso a la tabla Sup: Módulos Ant: Control de Versiones Err: Si hallas una errata ...


Importación

A menudo queremos importar ciertos símbolos de un módulo en nuestro espacio de nombres, para ahorrarnos pulsaciones: queremos escribir sqrt y no math::sqrt.

Una vez que un módulo ha sido localizado y compilado dentro de un programa Perl como consecuencia de una declaración use, el siguiente paso es la ejecución de la subrutina import de ese módulo. De hecho, la sentencia use module List es equivalente a:

BEGIN {require module; import module List; }
La conducta por defecto de import es vacía, pero podemos cambiar dicha conducta creando en nuestro módulo nuestra propia subrutina import. Es decir, el módulo en cuestión tiene que estar preparado para exportar esos identificadores al código cliente que los utiliza. El uso de BEGIN implica que require e import se ejecuten en el momento de la compilación.

Cuando es llamada import recibe como argumentos cualesquiera argumentos que aparezcan despues de la sentencia use. Por ejemplo, si un programa incluye una línea como:

use Technique::DandC::FFT ("sample");
entonces, una vez localizado y compilado el módulo Technique::DandC::FFT se procede a la llamada de import:
Technique::DandC::FFT::import("Technique::DandC::FFT", "sample");

Existe una declaración no que puede ser usada para desechar las importaciones realizadas mediante use:

no integer;
no strict 'refs';
La desactivación se mantendrá en el ámbito léxico de la declaración no.

Ejercicio 6.6.1   Queremos que la subrutina import del módulo myimport.pm que se define mas abajo exporte su función titi al espacio de nombres del package llamador, de manera que cuando se ejecute el siguiente programa usemyimport.pl:
$ cat -n ./usemyimport.pl
     1  #!/usr/bin/perl -w -I.
     2  use strict;
     3  use myimport;
     4
     5  my $titi = 4;
     6  my @titi = (1,2,3);
     7  &titi();
     8
     9  print"$titi\n";
    10  print"@titi\n";

de lugar a la salida:

$ ./usemyimport.pl
Hola
4
1 2 3
para ello, deberás escribir el código que ha sido sustituido por las líneas de puntos en el listado de myimport.pm.

$ cat -n ./myimport.pm
     1  package myimport;
     2  use strict;
     3
     4  sub titi {
     5    print "Hola\n";
     6  }
     7
     8  sub import {
     9
    10    my ($caller_package) = ....; # averiguar paquete llamador
    11    {
    12      ................; # desactivar strict
    13      ................; # instalar identificador
    14    }
    15  }
    16
    17  1;
SUGERENCIA:


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Acceso a la tabla Sup: Módulos Ant: Control de Versiones Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21