¿Atados? ó ¿Corbatas? ó Ties

La función tie asocia una variable con un conjunto de rutinas de un determinado paquete, de manera que a partir del momento en que se realiza la unión (tie) el acceso a la variable es gobernado por los métodos en el paquete. Por ejemplo, para una variable escalar escribiríamos:
tie $var, "Package::Name";
Los métodos dentro del paquete deben tener nombres especiales: TIESCALAR, FETCH, STORE y DESTROY.

El método TIESCALAR es invocado cuando se llama a la función tie. Se le pasan los mismos argumentos que se hayan pasado a la función tie, excepto por la variable en cuestión $var. Así, la llamada anterior se traduce en una llamada a Package::Name->TIESCALAR(). Si, por ejemplo atamos una variable con:

tie $var, "Package::Name", $arg1, $arg2, $arg3
Los argumentos adicionales se pasan a TIESCALAR, produciendo la llamada:
Package::Name->TIESCALAR($arg1, $arg2, $arg3)
La tarea de TIESCALAR es crear un nuevo objeto de la clase apropiada y devolver una referencia al mismo. El objeto implementa el estado interno de la variable original.

El método FETCH se llama siempre que se lee el valor de la variable. Se le pasa como único argumento una referencia al objeto que implementa la variable (el que fué creado por el constructor TIESCALAR). El valor devuelto por FETCH se usa como valor de la variable.

La subrutina STORE se llama siempre que se actualiza el valor de $var. Se le pasan dos argumentos: la referencia al objeto que implementa la variable y el nuevo valor a almacenar. No devuelve valor alguno.

El destructor, DESTROY, es llamado cuando $var desaparece (técnicamente, cuando el contador de referencias a $var que internamente lleva Perl alcanza cero). No suele ser necesaria, pero puede ser usada para realizar las labores de limpieza que la implementación requiera. El destructor es llamado también cuando se rompe explicitamente la atadura o compromiso usando la función untie:

untie $var;



Subsecciones
Casiano Rodríguez León
2009-10-04