next up previous contents
Next: Entregando resultados Up: Cuidado al utilizar referencias Previous: Cuidado al utilizar referencias   Contents

Las referencias a GLOBs

Un tipo especial de referencia es la de GLOBs -- A cualquier cosa.

En los espacio de nombres no sólamente entran los tipos de datos que aparecen en la tabla anterior -- escalares, arreglos, hashes y código (subrutinas). Además de esto entran también los manipuladores de archivo (filehandles). Si queremos, por ejemplo, pasar un manipulador de archivo como argumento, la manera tradicional es hacerlo por medio de una referencia global:func(*STDOUT) . Esto convierte al primer argumento de func en un objeto de tipo IO::Handle.

Sí, en su momento los GLOBs fueron una salida necesaria y elegante a una necesidad legítima del lenguaje. Sin embargo, hoy en día lo que mejor puede hacer un GLOB es confundirnos. Para pasar manipuladores de archivo entre funciones, sugiero utilizar la implementación nativa orientada a objetos de open, a través del paquete IO::Handle (o alguna de sus subclases, como IO::File o IO::Socket:

use IO::File;

if (necesito_abrir()) {

    my $handle = new IO::File;

    open($handle, 'archivo') or die $!;

    procesa_archivo($handle);

}
En este caso, $handle tiene todos los atributos de una variable léxica: Se la podemos pasar a la función procesa_archivo como parámetro, se cierra y desaparece automáticamente al salir del bloque en el que la declaramos, etc.


next up previous contents
Next: Entregando resultados Up: Cuidado al utilizar referencias Previous: Cuidado al utilizar referencias   Contents
Gunnar Wolf 2002-05-20