-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • unpack TEMPLATE,ESPR

    unpack è l'inverso di pack: prende una stringa e la espande in una lista di valori. (In contesto scalare restituisce solamente il primo valore generato).

    La stringa viene divisa in pezzi come descritto da TEMPLATE. Ogni pezzo viene convertito separatamente in un valore. Solitamente, la stringa è un risultato di pack, oppure i suoi byte rappresentano una struttura C di un qualche tipo.

    TEMPLATE ha lo stesso formato che nella funzione pack. Ecco una subroutine che trova una sottostringa:

        sub substr {
    	my($cosa,$dove,$quanto) = @_;
    	unpack("x$dove a$quanto", $cosa);
        }

    e poi c'è:

        sub ordinale { unpack("c",$_[0]); } # come ord()

    In aggiunta ai campi permessi da pack(), potete far precedere a ciascun campo un %<numero> per indicare che desiderate un checksum di <numero>-bit degli elementi anziché i reali elementi. Il checksum predefinito è di 16 bit. Il checksum è calcolato sommando i valori numerici dei valori espandi (per le stringhe viene considerata la somma di ord($carattere), per i bit la somma degli zero e degli uno).

    Per esempio, il seguente codice calcola lo stesso numero del programma sum di System V:

        $checksum = do {
    	local $/;  # slurp!
    	unpack("%32C*",<>) % 65535;
        };

    Il seguente codice conta in maniera efficiente il numero di bit impostati in un vettore di bit:

        $bitimpostati = unpack("%32b*", $maschera_di_selezione);

    I formati p e P devono essere usati con cura. Dato che Perl non ha alcun modo di controllare se il valore passato ad unpack() corrisponda ad una valida locazione di memoria, passare un puntatore che non si è certi sia valido probabilmente porterà a conseguenze disastrose.

    Se ci sono più codici per pack oppure se l conteggio delle ripetizioni di un campo o di un gruppo è maggiore di quanto il rimanente input permetta, il risultato non è ben definito: in alcuni casi, il conto delle ripetizioni viene decrementato, oppure unpack() produrrà stringhe nulle o zeri oppure terminerà con un errore. Se la stringa in input è più lunga di quella descritta da TEMPLATE, la parte in più viene ignorata.

    Consultate pack per ulteriori esempi e note.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google