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



 


indietro

[3] Perché i miei dati ottali non vengono interpretati correttamente?

Perl considera tali i numeri ottali ed esadecimali solo quando compaiono in maniera letterale all'interno del vostro programma. Gli ottali letterali in perl devono iniziare con uno "0", mentre quelli esadecimali devono essere preceduti da "0x". Se i valori vengono letti da qualche parte e poi assegnati, non viene effettuata alcuna conversione. Dovete esplicitamente usare oct() oppure hex() se desiderate che tali valori siano convertiti in decimale. oct() interpreta sia numeri esadecimali ("0x350") che ottali ("0350" o anche senza lo zero all'inizio, come "377"), mentre hex() converte solo gli esadecimali, con o senza "0x" all'inizio, come "0x255", "3A", "ff", oppure "deadbeef". La conversione inversa da decimale ad ottale può essere effettuata con i formati "%o" o "%O" di sprintf(). Per convertire da decimale ad esadecimale provate i formati "%x" o "%X" di sprintf().

Questo problema si presenta spesso quando si cercano di usare chmod(), mkdir(), umask(), oppure sysopen(), a cui i permessi vengono forniti in ottale per diffusa tradizione.

    chmod(644,  $file); # SBAGLIATO
    chmod(0644, $file); # corretto

Notate che l'errore nella prima linea è stato quello di specificare il decimale 644, anziché l'ottale 0644. Il problema può essere meglio osservato così:

    printf("%#o",644); # stampa 01204

Sicuramente non intendevate eseguire chmod(01204, $file); - o sì?

Se volete usare valori numerici come argomenti a chmod() e simili, cercate di esprimerli come ottali letterali, cioè con uno zero all'inizio e con le cifre successive limitate all'intervallo 0..7.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

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