Questa funziona collega una variabile ad una classe (un package), la quale
fornirà l'implementazione per la variabile. VARIABILE è il nome della
variabile da incantare. NOMECLASSE è il nome di una classe che implementa
oggetti del tipo corretto. Eventuali argomenti addizionali sono passati al metodo new
della classe (cioè TIESCALAR, TIEHANDLE, TIEARRAY o TIEHASH).
Tipicamente questi sono argomenti simili a quelli che si potrebbero passare alla funzione
dbm_open() del C. L'oggetto restituito dal metodo new è anche restituito
dalla funzione tie, e risulta utile per accedere ad altri metodi in NOMECLASSE.
Va notato che funzioni come keys e values possono restituire liste molto grandi
quando vengono usate su oggetti grandi, come file DBM. Potreste preferire l'utilizzo
della funzione each per iterare su tali strutture. Ad esempio:
# stampa gli offset del file history
use NDBM_File;
tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
while (($chiave,$val) = each %HIST) {
print $chiave, ' = ', unpack('L',$val), "\n";
}
untie(%HIST);
Una classe che implementa un hash deve contenere i seguenti metodi:
TIEHASH nomeclasse, LISTA
FETCH this, chiave
STORE this, chiave, valore
DELETE this, chiave
CLEAR this
EXISTS this, chiave
FIRSTKEY this
NEXTKEY this, ultimachiave
DESTROY this
UNTIE this
Un classe che implementa un array ordinario deve contenere i seguenti metodi:
TIEARRAY nomeclasse, LISTA
FETCH this, chiave
STORE this, chiave, valore
FETCHSIZE this
STORESIZE this, conteggio
CLEAR this
PUSH this, LISTA
POP this
SHIFT this
UNSHIFT this, LISTA
SPLICE this, scostamento, lunghezza, LISTA
EXTEND this, conteggio
DESTROY this
UNTIE this
Un classe che implementa un file handle deve contenere i seguenti metodi:
TIEHANDLE nomeclasse, LISTA
READ this, scalare, lunghezza, scostamento
READLINE this
GETC this
WRITE this, scalare, lunghezza, scostamento
PRINT this, LISTA
PRINTF this, formato, LISTA
BINMODE this
EOF this
FILENO this
SEEK this, posizione, dadove
TELL this
OPEN this, modo, LISTA
CLOSE this
DESTROY this
UNTIE this
Una classe che implementa uno scalare deve contenere i seguenti metodi:
TIESCALAR nomeclasse, LISTA
FETCH this,
STORE this, valore
DESTROY this
UNTIE this
Non è necessario implementare tutti i metodi sopra descritti. Consultate perltie, Tie::Hash, Tie::Array, Tie::Scalar e Tie::Handle.
A differenza di dbmopen, la funzione tie non chiamerà use o require per
voi su un modulo, dovrete farlo voi esplicitamente. Consultate DB_File o il modulo
Config per delle interessanti implementazioni di tie.
Per ulteriori dettagli consultate perltie, "tied VARIABLE" ["VARIABILE legata", NdT].