Amazon Best VPN GoSearch

Favicon di OnWorks

perl581delta - Online nel Cloud

Esegui perl581delta nel provider di hosting gratuito OnWorks su Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

Questo è il comando perl581delta che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

PROGRAMMA:

NOME


perl581delta - cosa c'è di nuovo per perl v5.8.1

DESCRIZIONE


Questo documento descrive le differenze tra la versione 5.8.0 e la versione 5.8.1.

Se stai aggiornando da una versione precedente come 5.6.1, leggi prima il perl58delta,
che descrive le differenze tra 5.6.0 e 5.8.0.

Nel caso ti stia chiedendo la 5.6.1, per quanto riguarda la correzione dei bug era piuttosto identica al
versione di sviluppo 5.7.1. Confuso? Si spera che questa timeline aiuti un po': elenca i
le nuove versioni principali, le relative versioni di manutenzione e le versioni di sviluppo.

Nuovo sviluppo di manutenzione

5.6.0 2000-mar-22
5.7.0 2000-set-02
5.6.1 2001-aprile-08
5.7.1 2001-aprile-09
5.7.2 2001-lug-13
5.7.3 2002-mar-05
5.8.0 2002-lug-18
5.8.1 2003-set-25

Incompatibile Modifiche


Hash randomizzazione
Principalmente per motivi di sicurezza, l'"ordine casuale" degli hash è stato reso ancora più ampio
a caso. In precedenza, mentre l'ordine degli elementi hash da chiavi(), valori ()e al direttore della fotografia ogni() Prima
essenzialmente casuale, era ancora ripetibile. Ora, tuttavia, l'ordine varia tra
diverse versioni di Perl.

Perl ha mai garantito in qualsiasi ordinazione of , il hash Tasti, e l'ordine è già
cambiato più volte durante la vita di Perl 5. Inoltre, l'ordine delle chiavi hash ha
sempre stato e continua ad essere influenzato dall'ordine di inserzione.

La casualità aggiunta può influenzare le applicazioni.

Uno scenario possibile è quando l'output di un'applicazione include dati hash. Per
esempio, se hai utilizzato il modulo Data::Dumper per scaricare i dati in file diversi e
quindi confrontato i file per vedere se i dati sono cambiati, ora avrai false
positivi poiché l'ordine in cui vengono scaricati gli hash varia. In generale la cura è
ordinare le chiavi (oi valori); in particolare per Data::Dumper utilizzare i "Sortkeys"
opzione. Se un ordine particolare è davvero importante, usa gli hash legati: ad esempio il
Tie::IxHash modulo che per impostazione predefinita conserva l'ordine in cui erano gli elementi hash
aggiunto.

Un problema più sottile è la dipendenza dall'ordine della "distruzione globale". Quello è ciò che
avviene alla fine dell'esecuzione: Perl distrugge tutte le strutture dati, inclusi i dati utente.
Se i tuoi distruttori (le subroutine DESTROY) hanno assunto un ordine particolare per il
distruzione globale, potrebbero esserci problemi futuri. Ad esempio, in un distruttore di uno
oggetto non puoi presumere che oggetti di qualsiasi altra classe siano ancora disponibili, a meno che tu non sia
tenere un riferimento a loro. Se la variabile d'ambiente PERL_DESTRUCT_LEVEL è impostata su a
valore diverso da zero, o se Perl esce da un thread generato, distruggerà anche l'ordinario
riferimenti e le tabelle dei simboli non più in uso. Non puoi chiamare un metodo di classe
o una funzione ordinaria su una classe che è stata raccolta in quel modo.

La randomizzazione dell'hash rivelerà sicuramente ipotesi nascoste su alcuni particolari
ordinamento degli elementi hash e bug evidenti: ha rivelato alcuni bug nel core Perl e
moduli di base.

Per disabilitare la randomizzazione hash in runtime, impostare la variabile d'ambiente PERL_HASH_SEED
a 0 (zero) prima di eseguire Perl (per maggiori informazioni vedere "PERL_HASH_SEED" in perlrun), o
per disabilitare completamente la funzionalità in fase di compilazione, compilare con "-DNO_HASH_SEED" (vedi
INSTALLARE).

Vedere "Attacchi alla complessità algoritmica" in perlsec per la logica originale alla base di questo
cambiare.

UTF-8 On Filehandle Non Più a lungo Attivato By Locale
In Perl 5.8.0 tutti i filehandle, inclusi i filehandle standard, erano implicitamente impostati su
essere in Unicode UTF-8 se le impostazioni locali indicavano l'uso di UTF-8. Questa caratteristica
ha causato troppi problemi, quindi la funzione è stata disattivata e riprogettata: vedere "Core
Miglioramenti".

numero singolo v-stringhe sono no più a lungo v-stringhe prima "=>"
La funzionalità stringhe di versione o v-string (vedi "Stringhe di versione" in perldata) introdotta in
Perl 5.6.0 è stato fonte di confusione, specialmente quando l'utente non voleva
usarlo, ma Perl pensava che lo sapesse meglio. Particolarmente fastidiosa è stata la caratteristica che
prima di un "=>" una stringa di versione (una "v" seguita da cifre) è stata interpretata come a
v-string invece di una stringa letterale. In altre parole:

%h = ( v65 => 42 );

ha significato dal Perl 5.6.0

%h = ( 'A' => 42 );

(almeno nelle piattaforme di progenie ASCII) Perl 5.8.1 ripristina il più naturale
interpretazione

%h = ( 'v65' => 42 );

Le v-string multi-numero come v65.66 e 65.66.67 continuano ad essere v-string in Perl
5.8

(Win32) -C Interruttore Ha Conosci riproposto
L'opzione -C è cambiata in modo incompatibile. Solo la vecchia semantica di questo interruttore
aveva senso in Win32 e solo nell'universo "usa utf8" nelle versioni 5.6.x, e non
senso per l'implementazione Unicode in 5.8.0. Poiché questo interruttore non poteva essere utilizzato
da chiunque, è stato riproposto. Il comportamento abilitato da questo interruttore in 5.6.x
le versioni possono essere supportate in modo trasparente e dipendente dai dati in una versione futura.

Per la nuova vita di questo switch, vedere "UTF-8 non è più predefinito nelle versioni locali UTF-8", e
"-C" in perlrun.

(Win32) /d Interruttore Of cmd.exe
Perl 5.8.1 utilizza l'opzione /d durante l'esecuzione interna della shell cmd.exe per sistema(),
backtick e quando si aprono pipe a programmi esterni. L'interruttore aggiuntivo disabilita il
esecuzione di comandi AutoRun dal registro, che è generalmente considerato indesiderabile
durante l'esecuzione di programmi esterni. Se desideri mantenere la compatibilità con il precedente
comportamento, imposta PERL5SHELL nel tuo ambiente su "cmd /x/c".

Nucleo Miglioramenti


UTF-8 no più a lungo difetto per UTF-8 locale
In Perl 5.8.0 sono state introdotte molte funzionalità Unicode. Uno di loro è risultato essere di più
fastidio che beneficio: l'automagica (e silenziosa) "UTF-8-ificazione" dei filehandle,
inclusi i filehandle standard, se le impostazioni internazionali dell'utente indicavano l'uso di UTF-8.

Ad esempio, se avevi "en_US.UTF-8" come locale, STDIN e STDOUT erano
automaticamente "UTF-8", in altre parole, è stato creato un implicito binmode(..., ":utf8"). Questo
significava che provare a stampare, diciamo, chr(0xff), ha finito per stampare i byte 0xc3 0xbf. Difficilmente
quello che avevi in ​​mente a meno che non fossi a conoscenza di questa caratteristica di Perl 5.8.0. Il problema è
che la stragrande maggioranza delle persone non lo era: ad esempio nelle versioni RedHat 8 e 9 il
difetto l'impostazione locale è UTF-8, quindi tutti gli utenti RedHat hanno filehandle UTF-8, indipendentemente dal fatto che siano
voluto o no. Il dolore è stato intensificato dall'implementazione Unicode di Perl 5.8.0
(ancora) avere brutti bug, specialmente legati all'uso di s/// e tr///. (Insetti che
sono stati corretti in 5.8.1)

Pertanto è stata presa la decisione di tornare indietro sulla funzione e cambiarla da implicita silenziosa
impostazione predefinita per l'opzione cosciente esplicita. La nuova opzione della riga di comando Perl "-C" e le sue
la variabile d'ambiente della controparte PERL_UNICODE ora può essere usata per controllare come Perl e
Unicode interagisce con interfacce come I/O e ad esempio gli argomenti della riga di comando. Vedere
"-C" in perlrun e "PERL_UNICODE" in perlrun per maggiori informazioni.

pericoloso Segnali ancora disponibile
In Perl 5.8.0 sono stati introdotti i cosiddetti "segnali sicuri". Ciò significa che Perl no
gestisce più i segnali immediatamente ma invece "tra codici operativi", quando è sicuro farlo
così. La precedente gestione immediata potrebbe facilmente corrompere lo stato interno di Perl,
provocando misteriosi incidenti.

Tuttavia, anche il nuovo modello più sicuro ha i suoi problemi. Perché ora un codice operativo, un'unità di base di
L'esecuzione di Perl, non viene mai interrotta ma lasciata eseguire fino al completamento, certo
operazioni che possono richiedere molto tempo ora richiedono davvero molto tempo. Ad esempio, certo
le operazioni di rete hanno i propri meccanismi di blocco e timeout e sono in grado di
interromperli immediatamente sarebbe carino.

Pertanto perl 5.8.1 introduce una "backdoor" per ripristinare il pre-5.8.0 (pre-5.7.3, in realtà)
comportamento del segnale Basta impostare la variabile d'ambiente PERL_SIGNALS su "non sicuro" e il vecchio
ritorni immediati (e non sicuri) del comportamento di gestione del segnale. Vedi "PERL_SIGNALS" in perlrun
e "Segnali differiti (segnali sicuri)" in perlipc.

Nelle notizie completamente non correlate, ora puoi utilizzare segnali sicuri con POSIX::SigAction. Vedere
"POSIX::SigAction" in POSIX.

Legato Array con Negativo Italia Indici
In precedenza, gli indici passati ai metodi "FETCH", "STORE", "EXISTS" e "DELETE" in
classe array erano sempre non negativi. Se l'argomento effettivo fosse negativo, Perl lo farebbe
chiama FETCHSIZE implicitamente e aggiungi il risultato all'indice prima di passare il risultato al
metodo array legato. Questo comportamento è ora facoltativo. Se la classe dell'array legato contiene a
variabile del pacchetto denominata $NEGATIVE_INDICES che è impostata su un valore vero, valori negativi
verrà passato a "FETCH", "STORE", "EXISTS" e "DELETE" senza modifiche.

locale ${$x}
le sintassi

locale ${$x}
locale @{$x}
locale %{$x}

ora localizzare le variabili, dato che $x è un nome di variabile valido.

Unicode Carattere Banca Dati 4.0.0
La copia del database dei caratteri Unicode inclusa in Perl 5.8 è stata aggiornata alla 4.0.0
da 3.2.0. Ciò significa ad esempio che le proprietà dei caratteri Unicode sono come in
Unicode 4.0.0.

Deprecazione Avvertenze
C'è una nuova deprecazione della funzionalità. Perl 5.8.0 ha dimenticato di aggiungere alcuni avvisi di deprecazione,
questi avvertimenti sono stati ora aggiunti. Infine, un promemoria di un'imminente rimozione di funzionalità.

(Promemoria) Pseudo-hash sono deprecato (veramente)

Gli pseudo-hash sono stati deprecati in Perl 5.8.0 e verranno rimossi in Perl 5.10.0, vedere
perl58delta per i dettagli. Ogni tentativo di accedere a pseudo-hash attiverà l'avviso
"Gli pseudo-hash sono deprecati". Se vuoi davvero continuare a usare pseudo-hash ma
per non vedere gli avvisi di deprecazione, usa:

nessun avviso "deprecato";

Oppure puoi continuare a utilizzare il pragma dei campi, ma per favore non aspettarti le strutture di dati
essere più pseudohash.

(Promemoria) 5.005 stile fili sono deprecato (veramente)

I thread in stile 5.005 (attivati ​​da "use Thread;") sono stati deprecati in Perl 5.8.0 e saranno
rimosso dopo Perl 5.8, vedere perl58delta per i dettagli. Ogni creazione di thread in stile 5.005
attiverà l'avviso "5.005 thread sono deprecati". Se vuoi davvero continuare
utilizzando i thread 5.005 ma non per visualizzare gli avvisi di deprecazione, utilizzare:

nessun avviso "deprecato";

(Promemoria) $* variabile is deprecato (veramente)

La variabile $* che controlla la corrispondenza su più righe è stata deprecata e verrà rimossa
dopo 5.8. La variabile è stata deprecata per molto tempo e un avviso di deprecazione
"L'uso di $* è deprecato", ora la variabile verrà finalmente rimossa. Il
la funzionalità è stata soppiantata dai modificatori "/s" e "/m" sul pattern matching. Se
vuoi davvero continuare a utilizzare la variabile $* ma non vedere gli avvisi di deprecazione,
uso:

nessun avviso "deprecato";

Miscellanea Miglioramenti
"mappa" in un contesto vuoto non è più costoso. "map" è ora sensibile al contesto e non lo farà
costruisce una lista se chiamata in un contesto void.

Se un socket viene chiuso dal server durante la stampa, il client ora riceve un SIGPIPE.
Sebbene questa nuova funzionalità non sia stata pianificata, è caduta naturalmente fuori dai cambiamenti di PerlIO ed è per
essere considerata una caratteristica accidentale.

PerlIO::get_layers(FH) restituisce i nomi dei livelli PerlIO attivi su un filehandle.

PerlIO::via i livelli ora possono avere un metodo UTF8 opzionale per indicare se il livello
vuole "auto-:utf8" il flusso.

utf8::is_utf8() è stato aggiunto come modo rapido per verificare se uno scalare è codificato
internamente in UTF-8 (Unicode).

moduli e pragmatico


aggiornato moduli E altre ancora… pragmatico
I seguenti moduli e pragmata sono stati aggiornati da Perl 5.8.0:

base
B::Codice byte
In condizioni molto migliori di prima. Ancora lontano dall'essere perfetto, ma forse ne vale la pena
provare.

B::Conciso
B::Partire
Segno di riferimento
Una funzione opzionale, ":hireswallclock", ora consente un orologio da parete ad alta risoluzione
volte (usa Time::HiRes).

Caricatore di byte
Vedi B::Bytecode.

bytes
Ora ha byte::substr.

CGI
nomi di char
Ora è possibile avere alias di nomi di caratteri personalizzati.

CPAN
Ora c'è un semplice frontend da riga di comando per il modulo CPAN.pm chiamato pan.

Dati::Dumper
Una nuova opzione, Coppia, consente di scegliere il separatore tra chiavi hash e valori.

File_DB
Sviluppo::PPPort
Riassunto::MD5
Codificare
Aggiornamenti significativi sulla funzionalità del pragma di codifica (tr/// e DATA
filehandle, formati).

Se un filehandle è stato contrassegnato per avere una codifica, i caratteri non mappabili sono
rilevato già durante l'input, non più tardi (quando vengono utilizzati i dati corrotti).

La tabella di conversione ISO 8859-6 è stata corretta (il 0x30..0x39 mappato erroneamente
a U+0660..U+0669, invece di U+0030..U+0039). La conversione GSM 03.38 no
gestire correttamente le sequenze di escape. È stata aggiunta la codifica UTF-7 (rendendo Encode
funzionalità complete di Unicode::String).

campi
libnet
Matematica :: BigInt
Molti bug sono stati corretti dalla v1.60, la versione inclusa in Perl v5.8.0.
Particolarmente degno di nota è il bug in Calc che ha causato il fallimento di div e mod per alcuni
grandi valori e le correzioni alla gestione di input errati.

Sono state aggiunte alcune nuove funzionalità, ad es radice() metodo, ora puoi passare i parametri a
configurazione() per modificare alcune impostazioni in fase di esecuzione, ed è ora possibile intercettare il
creazione di NaN e infinito.

Come al solito, sono state apportate alcune ottimizzazioni che hanno reso la matematica nel complesso un po' più veloce. In
alcuni casi, molto più velocemente, in realtà. Soprattutto biblioteche alternative come
Math::BigInt::GMP ne beneficia. Inoltre, molte delle routine piuttosto goffe
piace fqrt() e frusta() ora sono molto molto più veloci.

MIME::Base64
AVANTI
L'ereditarietà del diamante ora funziona.

Rete::Ping
PerlIO::scalare
La lettura da scalari non di tipo stringa (come le variabili speciali, vedere perlvar) ora funziona.

podlatori
Pod::LaTeX
PodParser
Pod::Perldoc
Riscrittura completa. Come effetto collaterale, non si rifiuta più di avviarsi quando viene eseguito da root.

Scalare::Util
Nuove utilità: refaddr, isvstring, look_like_number, set_prototype.

riponibile
Ora può memorizzare riferimenti al codice (tramite B::Deparse, quindi non infallibile).

rigoroso
Le versioni precedenti del pragma rigoroso non controllavano i parametri passati implicitamente
alla sua routine "import" (usa) e "unimport" (no). Questo ha causato il falso idioma tale
come:

usa rigoroso qw(@ISA);
@ISA = qw(Pippo);

Ciò tuttavia (probabilmente) ha sollevato la falsa aspettativa che i refs rigorosi, vars e
i sottotitoli venivano applicati (e che @ISA era in qualche modo "dichiarato"). Ma gli arbitri severi,
vars e subs sono non è un applicato quando si utilizza questo falso idioma.

A partire da Perl 5.8.1, quanto sopra andrete a causare la generazione di un errore. Questo può causare
programmi che venivano eseguiti apparentemente correttamente senza avvertimenti ed errori per fallire
quando eseguito sotto 5.8.1. Questo accade perché

usa rigoroso qw(@ISA);

ora fallirà con l'errore:

Tag "strict" sconosciuti "@ISA"

Il rimedio a questo problema è sostituire questo codice con l'idioma corretto:

usare rigorosamente;
usa vars qw(@ISA);
@ISA = qw(Pippo);

Termine::ANSIcolor
Collaudare l'imbragatura
Ora molto più esigente riguardo all'output extra o mancante dagli script di test.

Prova::Altro
Prova::Semplice
Testo:: Equilibrato
Tempo::HiRes
L'uso di nanosonno(), se disponibile, consente di combinare le pause di meno di un secondo con le sveglie.

fili
Diverse correzioni, ad esempio per aderire() problemi e perdite di memoria. In alcune piattaforme
(come Linux) che usano glibc l'impronta di memoria minima di un ithread è stata
ridotto di diverse centinaia di kilobyte.

discussioni::condiviso
Molte perdite di memoria sono state risolte.

Unicode::Fascicola
Unicode::Normalizza
Win32::GetFolderPath
Win32::GetOSVersione
Ora restituisce informazioni aggiuntive.

Utilità Modifiche


L'utility "h2xs" ora produce un layout più moderno: Foo-Bar/lib/Foo/Bar.pm invece di
Foo/Bar/Bar.pm. Inoltre, ora viene chiamato il test boilerplate t/Foo-Bar.t invece di t/1.t.

Il debugger Perl (lib/perl5db.pl) è stato ampiamente documentato e sono stati trovati bug
mentre la documentazione è stata corretta.

"perldoc" è stato riscritto da zero per essere più robusto e ricco di funzionalità.

"perlcc -B" ora funziona almeno un po' meglio, mentre "perlcc -c" è un po' più rotto.
(La suite di compilatori Perl nel suo insieme continua ad essere sperimentale.)

Nuovo Documentazione


perl573delta è stato aggiunto per elencare le differenze tra il (ormai abbastanza obsoleto)
versioni di sviluppo 5.7.2 e 5.7.3.

è stato aggiunto perl58delta: è il perldelta di 5.8.0, dettagliando le differenze
tra 5.6.0 e 5.8.0.

è stato aggiunto perlartistic: è la Licenza Artistica in formato pod, per semplificare
moduli per farvi riferimento.

è stato aggiunto perlcheat: è un cheat sheet di Perl.

è stato aggiunto perlgpl: è la GNU General Public License in formato pod, rendendola
più facile per i moduli farvi riferimento.

perlmacosx è stato aggiunto per raccontare l'installazione e l'uso di Perl in Mac OS X.

perlos400 è stato aggiunto per raccontare l'installazione e l'uso di Perl in OS/400 PASE.

è stato aggiunto perlreref: è un riferimento rapido per le espressioni regolari.

SERVIZIO DI e Configurazione miglioramenti


La posizione Perl standard Unix, /usr/bin/perl, non viene più sovrascritto per impostazione predefinita se
esiste. Questo cambiamento è stato molto prudente perché molti fornitori di Unix già forniscono a
/usr/bin/perl, ma contemporaneamente molte utilità di sistema possono dipendere da quella versione esatta
di Perl, quindi meglio non sovrascriverlo.

È ora possibile specificare le directory di installazione per le pagine man e HTML del sito e del fornitore e
script del sito e del fornitore. Vedere INSTALLARE.

È ora possibile specificare una directory di destinazione per l'installazione di Perl specificando il
Variabile DESTDIR per "make install". (Questa funzione è leggermente diversa dalla
precedente "Configura -Dinstallprefix=...".) Vedi INSTALLARE.

gcc versioni 3.x ha introdotto un nuovo avviso che causava molto rumore durante Perl
compilazione: "gcc -Ialreadyknowndirectory (avvertenza: cambio ordine di ricerca)". questo avvertimento
è stato ora evitato da Configure eliminando tali directory prima della compilazione.

Ora è possibile creare sottoinsiemi di moduli core Perl utilizzando i flag Configura
"-Dnoextensions=..." e "-Donlyextensions=...", vedi INSTALLARE.

Specifico della piattaforma miglioramenti
In Cygwin Perl ora può essere compilato con i thread ("Configure -Duseithreads"). Funziona con
sia Cygwin 1.3.22 che Cygwin 1.5.3.

Nelle versioni più recenti di FreeBSD, la compilazione di Perl 5.8.0 non è riuscita a causa del tentativo di utilizzare malloc.h,
che in FreeBSD è solo un file fittizio e un errore fatale anche solo da provare. Ora malloc.h
non viene utilizzato.

Ora è noto che Perl viene compilato anche in Hitachi HI-UXMPP.

È ora noto che Perl viene compilato di nuovo in LynxOS.

Mac OS X ora si installa con il numero di versione Perl incorporato nei nomi delle directory di installazione
per aggiornare più facilmente il Perl compilato dall'utente e le directory di installazione in generale
sono più standard. In altre parole, l'installazione predefinita non interrompe più l'Apple-
fornito Perl. D'altra parte, con "Configure -Dprefix=/ usr" ora puoi davvero
sostituire il Perl fornito da Apple (per favore be attento).

Mac OS X ora crea Perl staticamente per impostazione predefinita. Questo cambiamento è stato fatto principalmente per più veloce
tempi di avvio. Il Perl fornito da Apple è ancora collegato e condiviso dinamicamente e tu
può abilitare la condivisione per le proprie build Perl tramite "Configure -Duseshrplib".

Perl è stato portato nell'ambiente PASE OS/400 di IBM. Il modo migliore per costruire un Perl per
PASE consiste nell'utilizzare un host AIX come ambiente di compilazione incrociata. Vedere README.os400.

È stata aggiunta un'altra opzione di compilazione incrociata: ora Perl si basa su OpenZaurus, e
Distribuzione Linux basata su Mandrake + Embedix per Sharp Zaurus PDA. Vedi il
File incrociato/README.

Tru64 quando si utilizza gcc 3 elimina l'ottimizzazione per toke.c a "-O2" a causa del gigantesco
utilizzo della memoria con il valore predefinito "-O3".

Tru64 ora può compilare Perl con i nuovi DB Berkeley.

La creazione di Perl su WinCE è stata molto migliorata, vedi LEGGIMI.ce e LEGGIMI.perlce.

Selezionato Insetto Correzioni


chiusure, eval e lessicali
Ci sono state molte correzioni nell'area dei sottotitoli anonimi, dei lessici e delle chiusure. Sebbene
questo significa che Perl ora è più "corretto", è possibile che qualche codice esistente lo faccia
pausa che capita di fare affidamento sul comportamento difettoso. In pratica questo è improbabile a meno che
il tuo codice contiene una nidificazione molto complessa di sottotitoli anonimi, eval e lessicali.

Generico correzioni
Se un filehandle di input è contrassegnato ":utf8" e Perl vede entrare UTF-8 illegale quando lo fa
" ", se gli avvisi sono abilitati viene immediatamente dato un avviso - invece di essere muto
su di esso e Perl essere scontento dei dati rotti in seguito. (Il livello ":encoding(utf8)"
funziona anche allo stesso modo.)

binmode(SOCKET, ":utf8") funzionava solo sul lato di input, non sul lato di output del
presa. Ora funziona in entrambi i modi.

Per i Perls con thread alcune funzioni del database di sistema come getpwent() e getgrent() adesso
far crescere il buffer dei risultati in modo dinamico, invece di fallire. Ciò significa che nei siti con
molti utenti e gruppi le funzioni non falliscono più restituendo solo risultati parziali.

Perl 5.8.0 ha accidentalmente interrotto la capacità degli utenti di definire i propri
mappature Unicode maiuscole<->minuscole (come pubblicizzato dal Camel). Questa funzione ha
stato corretto ed è anche documentato meglio.

Nel 5.8.0 questo

$qualche_unicode .= ;

non ha funzionato correttamente ma ha invece danneggiato i dati. Questo è stato risolto.

I metodi legati come FETCH ecc. possono ora accedere in modo sicuro ai valori legati, ovvero risultando in a
chiamata ricorsiva a FETCH ecc. Ricorda però di interrompere la ricorsione.

All'avvio Perl blocca il segnale SIGFPE poiché non c'è molto che Perl possa fare al riguardo.
In precedenza questo blocco era attivo anche per i programmi eseguiti dall'interno di Perl. Ora
Perl ripristina la routine di gestione SIGFPE originale, qualunque essa fosse, prima dell'esecuzione
programmi esterni.

I numeri di lino negli script Perl ora possono essere maggiori di 65536 o 2**16. (Gli script Perl hanno
è sempre stato in grado di essere più grande di così, è solo che il numero di lino per gli errori segnalati
e gli avvertimenti si sono "avvolti".) Mentre gli script così grandi di solito indicano la necessità di
ripensa un po' al tuo codice, tali script Perl esistono, ad esempio come risultati generati da
codice. Ora i numeri di lino possono arrivare fino a 4294967296, o 2**32.

Specifico della piattaforma correzioni
Linux

· L'impostazione di $0 funziona di nuovo (con alcune limitazioni su cui Perl non può fare molto: vedi
"$0" in perlvar)

HP-UX

· L'impostazione $0 ora funziona.

VMS

· La configurazione ora verifica la presenza di "poll()" e IO::Poll ora utilizza il
funzione fornita dal fornitore, se rilevata.

· Una rara violazione di accesso all'avvio di Perl potrebbe verificarsi se l'immagine Perl è stata installata
con privilegi o se c'era un identificatore con l'attributo del sottosistema impostato nel
elenco dei diritti del processo. Ognuna di queste circostanze ha attivato il codice contaminante che
conteneva un bug del puntatore. L'aritmetica del puntatore difettosa è stata corretta.

· Il limite di lunghezza sui valori (non sulle chiavi) nell'hash %ENV è stato aumentato da 255 byte
a 32640 byte (tranne quando l'impostazione PERL_ENV_TABLES sovrascrive l'uso predefinito di
nomi logici per %ENV). Se è necessario accedere a questi valori lunghi dall'esterno
Perl, tieni presente che sono implementati utilizzando i nomi logici dell'elenco di ricerca che memorizzano
il valore in pezzi, ogni pezzo da 255 byte (fino a 128 di essi) è un elemento nel
lista di ricerca. Quando si esegue una ricerca in %ENV da Perl, gli elementi vengono combinati
in un unico valore. La capacità specifica del VMS esistente di accedere ai singoli elementi
di un nome logico della lista di ricerca tramite la sintassi $ENV{'pippo;N'} (dove Nèla lista di ricerca
indice) è inalterato.

· L'implementazione delle tubazioni ora utilizza simboli DCL locali anziché globali per l'inter-
comunicazione di processo.

· File::Find potrebbe confondersi durante la navigazione in una directory relativa il cui nome
si scontrava con un nome logico. Questo problema è stato corretto aggiungendo la directory
sintassi ai nomi di percorso relativi, impedendo così la traduzione dei nomi logici.

Win32

· Una perdita di memoria nel forchetta() l'emulazione è stata corretta.

· Il valore di ritorno di ioctl() la funzione incorporata è stata interrotta accidentalmente in 5.8.0.
Questo è stato corretto.

· Il ciclo di messaggi interno eseguito da perl durante le operazioni di blocco a volte
interferiva con i messaggi esterni a Perl. Questo spesso portava al blocco
operazioni terminate prematuramente o che restituiscono risultati errati, quando Perl era
in esecuzione in ambienti che potrebbero generare messaggi di Windows. Questo è stato
corretto.

· I tubi e le prese sono ora automaticamente in modalità binaria.

· La forma a quattro argomenti di Selezionare() non ha conservato $! (errno) correttamente quando c'è
erano errori nella chiamata sottostante. Questo è ora risolto.

· Il problema "CR CR LF" è stato risolto, binmode(FH, ":crlf") è ora effettivamente un
no-op.

Nuovo or Cambiato Diagnostica Ultrasuoni


Tutti gli avvisi relativi a pacchetto() e scompattare() sono state rese più informative e coerenti.

Cambiato "A filo uscito while %d fili sono stati in esecuzione"
La vecchia versione

Un thread è terminato mentre %d altri thread erano ancora in esecuzione

era fuorviante perché "l'altro" includeva anche il thread che dava l'avvertimento.

rimosso "Tentativo a pulire campo a limitato hash"
Non è illegale cancellare un hash limitato, quindi l'avviso è stato rimosso.

Nuovo "Illegale dichiarazione of anonimo sottoprogramma"
È necessario specificare il blocco di codice per "sub".

Cambiato "Non valido gamma "%S" in traslitterazione operatore"
La vecchia versione

Intervallo "%s" [] non valido nell'operatore di traslitterazione

era semplicemente sbagliato perché non ci sono "[] intervalli" in tr///.

Nuovo "Mancante di controllo serbatoio Nome in \C"
Si spiega da sé.

Nuovo "Nuova linea in giustificato a sinistra stringa per %S"
Gli spazi di riempimento apparirebbero dopo la nuova riga, che probabilmente non è quella che avevi dentro
mente.

Nuovo "Possibile precedenza problema on bit a bit %c operatore"
Se pensi questo

$x & $y == 0

verifica se l'AND bit per bit di $x e $y è zero, ti piacerà questo avviso.

Nuovo "Pseudo-hash sono deprecato"
Questo avviso avrebbe dovuto essere già in 5.8.0, dal momento che lo sono.

Nuovo "read () on %s filehandle %S"
Non è possibile read () (o sysread()) da un filehandle chiuso o non aperto.

Nuovo "5.005 fili sono deprecato"
Questo avviso avrebbe dovuto essere già in 5.8.0, dal momento che lo sono.

Nuovo "Legato variabile liberato while ancora in uso"
Qualcosa ha staccato la spina a una variabile live legata, Perl gioca sul sicuro salvandosi.

Nuovo "A%s: illegale mappatura '%S'"
È stata specificata una casemapping Unicode illegale definita dall'utente.

Nuovo "Uso of liberato APPREZZIAMO in iterazione"
Qualcosa ha modificato i valori su cui si è iterato. Questo non è buono.

Cambiato Interni


Queste notizie ti interessano solo se scrivi il codice XS o ti piace sapere o hackerare
Perl interni (usando Devel::Peek o uno qualsiasi dei moduli "B::" conta), o piace eseguire Perl
con l'opzione "-D".

Gli esempi di incorporamento di perlembed sono stati rivisti per essere aggiornati e coerenti:
per esempio, l'uso corretto di PERL_SYS_INIT3() e PERL_SYS_TERM().

È stata effettuata un'ampia rielaborazione del codice pad (il codice responsabile delle variabili lessicali)
condotto da Dave Mitchell.

Ampio lavoro sulle v-string di John Peacock.

Cache di posizione e lunghezza UTF-8: per velocizzare la gestione degli scalari Unicode (UTF-8), a
cache è stata introdotta. Esistono potenziali problemi se un'estensione ignora le API ufficiali
e modifica direttamente il PV di un SV: la cache UTF-8 non viene cancellata come dovrebbe.

Le API obsolete in Perl 5.8.0, come sv_2pv, sv_catpvn, sv_catsv, sv_setsv, sono di nuovo
a disposizione.

Alcune API C core di Perl come cxinc e regatom non sono più disponibili per il codice
al di fuori del core Perl delle estensioni del core Perl. Questo è intenzionale. Loro mai
avrebbe dovuto essere disponibile con i nomi più brevi, e se l'applicazione dipende da loro,
dovresti (vergognarti e) contattare perl5-porters per discutere quali sono le API corrette.

Alcune API C core di Perl come "Perl_list" non sono più disponibili senza il loro "Perl_"
prefisso. Se il tuo modulo XS smette di funzionare perché alcune funzioni non possono essere trovate, in molti
casi una semplice soluzione consiste nell'aggiungere il prefisso "Perl_" alla funzione e al contesto del thread
"aTHX_" come primo argomento della chiamata di funzione. Questo è anche come dovrebbe sempre
è stato fatto: lasciare che i moduli privi di Perl_ trapelano dal nucleo è stato un incidente. Per
incorporamento più pulito puoi anche forzarlo per tutte le API definendo in fase di compilazione il cpp
definire PERL_NO_SHORT_NAMES.

Perl_save_bool() è stato aggiunto.

Gli oggetti Regexp (quelli creati con "qr") ora hanno S-magic anziché R-magic. Questo risolto
espressioni regolari della forma /...(??{...;$x})/ per non ignorare più le modifiche apportate a $x. La S-magia
evita di far cadere l'ottimizzazione della memorizzazione nella cache e di creare (??{...}) costrutti oscenamente lenti
(e di conseguenza inutile). Vedi anche "Variabili Magiche" in perlguts. Regexp::Copia era
colpiti da questo cambiamento.

Le macro di debug interne di Perl DEBUG() e DEB() sono stati rinominati in PERL_DEBUG() e
PERL_DEB() per evitare conflitti di namespace.

"-DL" rimosso (il leaktest era stato rotto e non supportato per anni, usa un'alternativa
debugging di malloc o strumenti come valgrind e Purify).

Modificatore dettagliato "v" aggiunto per "-DXv" e "-Dsv", vedere perlrun.

Nuovo Test


In Perl 5.8.0 c'erano circa 69000 test separati in circa 700 file di test, in Perl 5.8.1
ci sono circa 77000 test separati in circa 780 file di test. I numeri esatti dipendono da
la configurazione Perl e sulla piattaforma del sistema operativo.

Noto Problematica


La randomizzazione dell'hash menzionata in "Modifiche incompatibili" è decisamente problematica: è
risveglierà insetti dormienti e scuoterà le cattive ipotesi.

Se vuoi usare mod_perl 2.x con Perl 5.8.1, avrai bisogno di mod_perl-1.99_10 o superiore.
Le versioni precedenti di mod_perl 2.x non funzionano con gli hash randomizzati. (mod_perl 1.x
funziona bene.) Avrai anche bisogno di Apache::Test 1.04 o successivo.

Molte delle piattaforme più rare che hanno funzionato al 100% o quasi con perl 5.8.0 hanno
sono stati lasciati un po' incustoditi dato che i loro manutentori sono stati impegnati in altro modo ultimamente,
e quindi ci saranno più guasti su quelle piattaforme. Tali piattaforme includono Mac
OS Classic, IBM z/OS (e altre piattaforme EBCDIC) e NetWare. Il Perl più comune
piattaforme (Unix e Unix-like, piattaforme Microsoft e VMS) hanno test sufficientemente grandi e
popolazione esperta che stanno facendo bene.

Legato hash in scalare contesto
Gli hash legati attualmente non restituiscono nulla di utile in un contesto scalare, ad esempio quando
usati come test booleani:

se (%tied_hash) { ... }

L'attuale comportamento insensato è sempre quello di restituire false, indipendentemente dal fatto che
hash è vuoto o contiene elementi.

La causa principale è che non esiste un'interfaccia per gli implementatori di hash legati a
implementare il comportamento di un hash in un contesto scalare.

Rete::Ping 450_servizio e 510_ping_udp fallimenti
I subtest 9 e 18 di lib/Net/Ping/t/450_service.t e il subtest 2 di
lib/Net/Ping/t/510_ping_udp.t potrebbe non riuscire se si dispone di una configurazione di rete insolita. Per
esempio in quest'ultimo caso il test sta tentando di inviare un ping UDP all'indirizzo IP
127.0.0.1

AVANTI CRISTO
Il backend del compilatore C-generatore B::C (il frontend è "perlcc -c") è ancora più
rotto di quanto non fosse in passato a causa delle ampie modifiche delle variabili lessicali. (Il bene
la novità è che B::Bytecode e ByteLoader sono migliori di prima.)

Piattaforma Specifica Problematica


EBCDIC Piattaforme
IBM z/OS e altre piattaforme EBCDIC continuano a essere problematiche per quanto riguarda il supporto Unicode.
Molti test Unicode vengono saltati quando dovrebbero essere corretti.

Cygwin 1.5 problemi
In Cygwin 1.5 il io/dico e op/sisi i test hanno fallimenti per qualche motivo ancora sconosciuto.
In 1.5.5 i test dei thread stress_cv, stress_re e stress_string falliscono a meno che non
la variabile d'ambiente PERLIOèimpostata su "perlio" (che fa andare anche l'errore io/tell
lontano).

Perl 5.8.1 compila e funziona bene con Cygwin 1.3: con (uname -a) "CYGWIN_NT-5.0 ...
1.3.22(0.78/3/2) 2003-03-18 09:20 i686 ..." è stato ottenuto un "make test" del 100% con
"Configura -des -Duseithreads".

HP-UX: HP cc avvertenze informazioni inviare file e percorso di invio
Con alcune versioni del compilatore HP C (ad es. B.11.11.02) riceverai molti avvisi come questo
(righe avvolte per facilitare la lettura):

cc: "/usr/include/sys/socket.h", riga 504: avviso 562:
Nuova dichiarazione di "sendfile" con un diverso identificatore di classe di archiviazione:
"sendfile" avrà un collegamento interno.
cc: "/usr/include/sys/socket.h", riga 505: avviso 562:
Nuova dichiarazione di "sendpath" con un diverso identificatore di classe di archiviazione:
"sendpath" avrà un collegamento interno.

Gli avvisi vengono visualizzati sia durante la compilazione di Perl che durante alcuni test lib/ExtUtils
che invocano il compilatore C. L'avvertimento, tuttavia, non è grave e può essere ignorato.

IRIX: t/uni/tr_7jis.t falsamente in mancanza di
È noto che il test t/uni/tr_7jis.t riporta il fallimento sotto 'make test' o il test harness
con alcune versioni di IRIX (almeno IRIX 6.5 e MIPSpro Compilers Version 7.3.1.1m),
ma se eseguito manualmente il test passa completamente.

Mac OS X: no usemymalloc
Il Perl malloc ("-Dusemymalloc") non funziona affatto in Mac OS X. Questo non è quello
serio, però, dal momento che il malloc nativo funziona bene.

Ver64: Non filettato costruisce con GNU cc (ccc)
Nelle ultime versioni di Tru64 (es v5.1B o successive) gcc non può essere utilizzato per compilare a
threaded Perl (-Duseithreads) perché il sistema " "il file non sa di
gcc.

Win32: sistema aperto, lettura di sistema, syswrite
A partire dalla versione 5.8.0, sysopen()/sysread()/scrittura di sistema() non comportarti come una volta
5.6.1 e precedenti rispetto alla modalità "testo". Questi built-in ora funzionano sempre in
modalità "binaria" (anche se sysopen() è stato passato il flag O_TEXT, o se modalità bin() è stato utilizzato su
il file handle). Nota che questo problema dovrebbe fare la differenza solo per i file su disco, come
socket e pipe sono sempre stati in modalità "binaria" nella porta di Windows. Poiché questo comportamento
è attualmente considerato un bug, il comportamento compatibile potrebbe essere reintrodotto in futuro
pubblicazione. Fino ad allora, l'uso di sysopen(), sysread() e scrittura di sistema() non è supportato per
operazioni in modalità "testo".

Futuro Istruzioni


Le seguenti cose forza accadere in futuro. Le prime versioni pubblicamente disponibili con
queste caratteristiche saranno i rilasci dello sviluppatore Perl 5.9.x, culminanti nel Perl
versione 5.10.0. Queste sono le nostre migliori ipotesi al momento: ci riserviamo il diritto di
ripensare.

· PerlIO diventerà il Predefinito. Attualmente (in Perl 5.8.x) la libreria stdio è ancora
usato se Perl pensa di poter usare certi trucchi per far funzionare stdio veramente veloce. Per
versioni future il nostro obiettivo è rendere PerlIO ancora più veloce.

· Una nuova funzione chiamata asserzioni sarà disponibile. Ciò significa che si può avere il codice
chiamate asserzioni sparse nel codice: di solito sono ottimizzate, ma possono
essere abilitato con l'opzione "-A".

· Sarà disponibile un nuovo operatore "//" (definito-or). Ciò significa che uno sarà in grado
dire

$un // $b

invece di

definito $a ? $a : $b

e

$c //= $d;

invece di

$c = $d a meno che non sia definito $c;

L'operatore avrà la stessa precedenza e associatività di "||". Un codice sorgente
la patch contro i sorgenti Perl 5.8.1 sarà disponibile in CPAN come
autori/id/H/HM/HMBRAND/dor-5.8.1.diff.

· "unpack()" di default decomprime $_.

· Varie tecniche Copy-On-Write saranno studiate nella speranza di accelerare Perl.

· CPANPLUS, Inline e Module::Build diventeranno moduli principali.

· Verrà introdotta la capacità di scrivere veri pragma con ambito lessicale.

· Il lavoro continuerà sul bytecompilatore e sul byteloader.

· Le v-string così come esistono attualmente sono programmate per essere deprecate. La forma senza v
(1.2.3) diventerà un "oggetto versione" se usato con "use", "require" e $VERSION.
$^V sarà anche un "oggetto versione" quindi il costrutto printf("%vd",...) non sarà più
essere necessario. La versione v-ful (v1.2.3) diventerà obsoleta. L'equivalenza di
le stringhe e le stringhe v (ad esempio, che attualmente 5.8.0 è uguale a "\5\8\0") scompariranno.
Ci può be no deprecazione identificazione dei warning per v-stringhe, però: è piuttosto difficile da rilevare
quando le v-string vengono utilizzate in modo sicuro e quando non lo sono.

· 5.005 thread verranno rimossi

· La variabile $* verrà rimossa (era deprecata molto tempo fa)

· Gli pseudohash verranno rimossi

Reportistica Bugs


Se trovi quello che pensi sia un bug, potresti controllare gli articoli pubblicati di recente su
comp.lang.perl.misc newsgroup e il database dei bug perl su http://bugs.perl.org/ . Ci
possono anche essere informazioni su http://www.perl.com/ , la home page di Perl.

Se ritieni di avere un bug non segnalato, esegui il perlbug programma incluso con
il tuo rilascio. Assicurati di ridurre il tuo bug a un test case piccolo ma sufficiente. Il tuo bug
report, insieme all'output di "perl -V", verrà inviato a [email protected] essere
analizzato dal team di porting di Perl. Puoi sfogliare e cercare i bug di Perl 5 su
http://bugs.perl.org/

Usa perl581delta online utilizzando i servizi onworks.net


Server e workstation gratuiti

Scarica app per Windows e Linux

Comandi Linux

Ad




×
Cookie per pubblicità
❤️Fai acquisti, prenota o acquista qui: nessun costo, aiuta a mantenere i servizi gratuiti.