=head1 NOME perlunicode - Supporto Unicode in Perl =head1 DESCRIZIONE =head2 Avvertenze Importanti Un supporto completo Unicode richiede una gran quantitE di lavoro. Sebbene Perl non implementi lo standard Unicode e i rapporti tecnici allegati da parte a parte, Perl fornisce comunque una gran quantitE di funzionalitE Unicode. =over 4 =item Strati di Input e Output Perl sa che un filehandle usa la codifica Unicode interna (UTF-8, o UTF-EBCDIC su piattaforme EBCDIC) se il filehandle viene aperto con lo strato C<:utf8>. Altre codifiche possono essere convertite alla codifica interna Perl in lettura (o viceversa in scrittura) usando lo strato C<:encoding(...)>. Leggete L. Per indicare che il sorgente stesso dello script E in una particolare codifica, usate L. =item Espressioni Regolari Il compilatore delle espressioni regolari produce istruzioni polimorfiche. Ovvero, l'espressione si adatta ai dati e commuta automaticamente allo schema di caratteri Unicode quando viene usata su dati Unicode -- o viceversa usa lo schema tradizionale a byte quando viene usata su dati a byte. =item C E ancora necessario per usare UTF-8/UTF-EBCDIC negli script Per compatibilitE, la direttiva C deve essere inclusa esplicitamente per attivare il riconoscimento di stringhe in UTF-8 nei sorgenti degli script (nelle costanti stringa e espressioni regolari, o nei nomi degli identificatori) sulle macchine ASCII, ovvero il riconoscimento di UTF-EBCDIC sulle macchine EBCDIC. B<< Questi sono i soli casi in cui E necessario un esplicito C >>. Cfr. L. Potete anche usare la direttiva C per cambiare la codifica di default per i dati nei vostri script; cfr. L. =item gli script marcati con BOM o codificati in UTF-16 sono riconosciuti automaticamente Se uno script Perl comincia con il BOM Unicode (codificato in UTF-16LE, UTF16-BE, o UTF-8), oppure sembra essere codificato in UTF-16 (con i byte in qualunque ordine) senza BOM, perl interpreterE correttamente lo script in Unicode. (UTF-8 senza BOM non è efficacemente distinguibile da ISO 8859-1 o altre codifiche a 8 bit). =item C E necessario per interpretare correttamente le stringhe di byte non Latin-1 Per default, c'E una asimmetria fondamentale nel modello Unicode di Perl: la conversione implicita da stringhe di byte a stringhe di caratteri Unicode assume che la codifica di partenza sia I, ma le stringhe di caratteri Unicode vengono convertite in stringhe di byte usando UTF-8. Questo succede perchE i primi 256 code point di Unicode concordano (quasi per caso) con Latin-1. Se volete che le stringhe di byte siano interpretate come UTF-8, usate la direttiva C: use encoding 'utf8'; Cfr. L per ulteriori dettagli. =back =head2 Semantica a byte e a caratteri A partire dalla versione 5.6, la rappresentazione interna delle stringhe in Perl E basata su caratteri "larghi" (nel senso che possono occupare piE di un byte). Nel futuro, si potrE supporre che le operazioni a livello di Perl lavorino su caratteri anzichE byte. Comunque, come misura di compatiblitE temporanea, Perl cerca di fornire un percorso sicuro di migrazione per i vostri programmi da semantica a byte a semantica a caratteri. Nel caso di operazioni per le quali Perl puE decidere senza ambiguitE che i dati in ingresso sono caratteri, viene usata la semantica a caratteri. Nel caso di operazioni per le quali questa decisione non puE essere effettuata senza ulteriori informazioni da parte dell'utente, Perl decide per la compatibilitE e sceglie la semantica a byte. Questo comportamento mantiene la compatiblitE con versioni precedenti del Perl, che usavano la semantica a byte solo nel caso in cui nessuno degli input del programma erano indicati come sorgenti di caratteri Unicode. Questi dati possono provenire da filehandle, da chiamate a programmi esterni, da informazioni fornite dal sistema (ad esempio C<%ENV>), o da costanti nel sorgente. La direttiva C forzerE sempre, indipendentemente dalla piattaforma, la semantica a byte in un particolare scope lessicale. Cfr. L. La direttiva C E principalmente un sistema di compatibilitE che attiva il riconoscimenti di costanti UTF-(8|EBCDIC) da parte del parser. Notate che questa direttiva E necessaria solo finchE Perl assume una semantica a byte; quando la semantica a caratteri diventerE quella predefinita, questa direttiva potrE non avere piE effetto. Cfr. L. Tranne dove viene detto esplicitamente, gli operatori Perl usano la semantica a carattere per i dati Unicode e la semantica a byte per i dati non Unicode. La decisione di usare la semantica a carattere E fatta in modo trasparente. Se i dati provengono da una sorgente Unicode -- ad esempio, da un filehandle cui E stato applicato uno strato di codifica, o da una costante Unicode nel sorgente -- si applica la semantica a carattere. Altrimenti, si applica la semantica a byte. La direttiva C E usata per forzare la semantica a byte sui dati Unicode. Se si concatenano stringe con semantica a byte e stringhe Unicode, la nuova stringa verrE creata decodificando la stringa di byte usando I, anche se le stringhe Unicode usavano EBCDIC. Questa trasformazione avviene senza considerare quale sia la codifica nativa a 8 bit del sistema; per cambiare questo comportamento in sistemi la cui codifica nativa non E nE Latin-1 nE EBCDIC usate la direttiva C. Cfr. L. Secondo la semantica a carattere, molte operazioni che prima lavoravano sui byte ora lavorano sui caratteri. Un carattere in Perl E, a livello logico, un numero tra 0 e circa 2**31. I caratteri con valore piE alto potrebbero essere codificati internamente con sequenze di byte piE lunghe, ma questi dettagli sono quasi del tutto nascosti al codice Perl. Leggete L per ulteriori informazioni. =head2 Effetti della semantica a carattere La semantica a carattere ha gli effetti seguenti: =over 4 =item * Le stringhe -- incluse le chiavi degli hash -- e le espressioni regolari possono contenere caratteri aventi valore ordinale maggiore di 255. Se usate un editor Unicode per scrivere i vostri programmi, i caratteri Unicode possono essere inseriti direttamente nelle costanti stringa in una qualunque delle vari codifiche di Unicode (UTF-8, UTF-EBCDIC, UTF-16, etc.), ma verranno riconosciuti come tali e convertiti nella codifica interna del Perl solo se la codifica E stata indicata con un'apposita direttiva L. Potete inserire caratteri Unicode all'interno di una stringa anche usando la notazione C<\x{...}>. Tre le graffe dovete inserire il code point Unicode del carattere, in esadecimale. Ad esempio, una faccina sorridente E C<\x{263A}>. Questo metodo funziona soltanto per i caratteri con valore maggiore o uguale a C<0x100>. Inoltre, se scrivete use charnames ':full'; potete usare la notazione C<\N{...}> inserendo tre le graffe il nome ufficiale Unicode del carattere, come ad esempio C<\N{WHITE SMILING FACE}>. =item * Se avete specificato una codifica con un'opportuna direttiva L, gli identificatori nello script Perl possono contenere caratteri alfanumerici Unicode, ideogrammi inclusi. Al momento Perl non tenta di canonicalizzare i nomi di variabile. =item * Le espressioni regolari fanno match su caratteri anzichE byte. "C<.>" fa match su un carattere anzichE su un byte. Il pattern "C<\C>" forza il match di un singolo byte -- si chiama C<\C> perchE un byte nel linguaggio C viene chiamato C. =item * Le classi di caratteri nelle espressioni regolari fanno match su caratteri anzichE byte e fanno match sulle proprietE dei caratteri specificate nel database delle proprietE Unicode. Ad esmepio, "C<\w>" puE essere usato per far match su un ideogramma giapponese. (Comunque, a causa di una limitazione dell'implementazione attuale, usare C<\w> o C<\W> I di una classe di caratteri C<[...]> farE sempre match sui byte). =item * ProprietE Unicode, I