indietro

  • tie VARIABILE,NOMECLASSE,LISTA

    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].