EnglezăFrancezăSpaniolă

Favicon OnWorks

perl58delta - Online în cloud

Rulați perl58delta în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda perl58delta care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


perl58delta - ce este nou pentru perl v5.8.0

DESCRIERE


Acest document descrie diferențele dintre versiunea 5.6.0 și versiunea 5.8.0.

Multe dintre remediile de erori din 5.8.0 au fost deja văzute în versiunea de întreținere 5.6.1, deoarece
cele două versiuni au fost menținute îndeaproape coordonate (în timp ce 5.8.0 era încă apelată
5.7.ceva).

Modificările care au fost integrate în versiunea 5.6.1 sunt marcate cu „[561]”. Multe dintre acestea
modificările au fost dezvoltate în continuare de la lansarea 5.6.1, acestea fiind marcate „[561+]”.

Puteți vedea lista modificărilor din versiunea 5.6.1 (atât din versiunea 5.005_03, cât și
versiunea 5.6.0) citind perl561delta.

Important de subliniat In 5.8.0


· Suport Unicode mai bun

· Noua implementare IO

· Implementarea noului thread

· O mai bună acuratețe numerică

· Semnale sigure

· Multe module noi

· Teste de regresie mai extinse

Incompatibil Modificări


Binar Incompatibilitate
Perl 5.8 is nu binar compatibil cu mai devreme Comunicate of Perl.

Tu avea la recompila ta XS module.

(Modulele Pure Perl ar trebui să continue să funcționeze.)

Motivul major al discontinuității este noua arhitectură IO numită PerlIO. PerlIO
este configurația implicită, deoarece fără ea multe caracteristici noi ale Perl 5.8 nu pot exista
folosit. Cu alte cuvinte: trebuie doar să recompilați modulele care conțin cod XS, îmi pare rău
despre asta.

În versiunile viitoare ale Perl, modulele XS care nu sunt compatibile cu PerlIO pot deveni complet neacceptate.
Totuși, acest lucru nu ar trebui să fie prea dificil pentru autorii de module: PerlIO a fost conceput ca un
înlocuire drop-in (la nivel de cod sursă) pentru interfața stdio.

În funcție de platforma dvs., există și alte motive pentru care am decis să rupem binarul
compatibilitate, vă rugăm să citiți mai departe.

64-bit platforme si malloc
Dacă pointerii dvs. au o lățime de 64 de biți, malloc-ul Perl nu mai este folosit pentru că o face
nu funcționează bine cu pointerii de 8 octeți. De asemenea, de obicei sistemul se defectează pe astfel de platforme
sunt mult mai bine optimizate pentru modele de memorie atât de mari decât malloc-ul Perl. Niște amintiri-
aplicațiile Perl înfometate precum PDL nu funcționează bine cu malloc-ul lui Perl. În sfârșit, altele
aplicațiile decât Perl (cum ar fi mod_perl) tind să prefere sistemul malloc. Astfel de
platformele includ Alpha și HPPA pe 64 de biți, MIPS, PPC și Sparc.

AIX Dynaloading
Încărcarea dinamică AIX utilizează acum în versiunile AIX 4.3 și mai noi interfața nativă dlopen a
AIX în loc de vechea interfață emulată. Această schimbare probabil se va rupe înapoi
compatibilitate cu modulele compilate. Modificarea a fost făcută pentru a face Perl mai compatibil
alte aplicații precum mod_perl care folosesc interfața nativă AIX.

Atribute pentru "Ale mele" variabile acum manipulate at timp de rulare
Sintaxa „my EXPR: ATTRS” aplică acum atribute variabile în timpul execuției. (Subrutină și
Variabilele „noastre” încă primesc atribute aplicate la momentul compilării.) Vezi atributele pentru
detalii suplimentare. În special, totuși, acest lucru permite atributelor variabile să fie utile
pentru interfețele „legate”, care a fost o deficiență a versiunilor anterioare. Rețineți că noul
semantica nu funcționează cu modulul Attribute::Handlers (începând cu versiunea 0.76).

Priză Extensie Dinamic in extensia VMS
Extensia Socket este acum încărcată dinamic în loc să fie încorporată static. Aceasta
poate fi sau nu o problemă cu vechile stive TCP/IP de VMS: nu știm de când am
nu am putut testa Perl în astfel de configurații.

format IEEE plutitor Punct Mod implicit on OpenVMS Alfa
Perl folosește acum formatul IEEE (T_FLOAT) ca format intern implicit în virgulă mobilă
OpenVMS Alpha, care poate rupe compatibilitatea binară cu bibliotecile externe sau
datele existente. G_FLOAT este încă disponibil ca opțiune de configurare. Valoarea implicită pe VAX
(D_FLOAT) nu s-a schimbat.

Nou Unicode Semantică (nu mai mult "utilizare utf8", aproape)
Anterior, în Perl 5.6, pentru a utiliza Unicode, se spunea „utilizați utf8” și apoi operațiunile
(ca concatenarea șirurilor de caractere) erau conștienți de Unicode în acel domeniu lexical.

S-a constatat că aceasta este o interfață incomodă, iar în Perl 5.8 modelul Unicode are
complet schimbat: acum „Unicodeness” este legat de datele în sine, iar pentru cea mai mare parte
timpul „utilizați utf8” nu este deloc necesar. Singura utilizare rămasă a „use utf8” este atunci când
Scriptul Perl în sine a fost scris în codificarea UTF-8 a Unicode. (UTF-8 nu a fost
a făcut implicit, deoarece există multe scripturi Perl care folosesc diverse
seturi naționale de caractere pe opt biți, care ar fi ilegale în UTF-8.)

Vezi perluniintro pentru explicația modelului actual și utf8 pentru utilizarea curentă a
pragma utf8.

Nou Unicode Proprietăţi
Unicode script-uri sunt acum suportate. Scripturile sunt similare (și superioare) Unicode
blocuri. Diferența dintre scripturi și blocuri este că scripturile sunt glifele folosite de a
limba sau un grup de limbi, în timp ce blocurile sunt grupări mai artificiale ale
(în mare parte) 256 de caractere bazate pe numerotarea Unicode.

În general, scenariile sunt mai incluzive, dar nu universal. De exemplu, în timp ce
scrierea „latină” include toate caracterele latine și diferitele lor împodobite cu diacritice
versiuni, nu include diferitele semne de punctuație sau cifre (deoarece nu sunt exclusiv
"Latin").

O serie de alte proprietăți sunt acum acceptate, inclusiv „\p{L&}”, „\p{Orice}”
„\p{Asignat}”, „\p{Neatribuit}”, „\p{Blank}” [561] și „\p{SpacePerl}” [561] (împreună cu
versiunile lor „\P{...}”, desigur). Consultați perlunicode pentru detalii și mai multe completări.

Prefixul „În” sau „Este” pentru numele folosite cu „\p{...}” și „\P{...}” sunt acum aproape
întotdeauna opțional. Singura excepție este că un prefix „În” este necesar pentru a semnifica un Unicode
bloc atunci când un nume de bloc intră în conflict cu un nume de script. De exemplu, „\p{Tibetan}” se referă la
scriptul, în timp ce „\p{InTibetan}” se referă la bloc. Când nu există conflict de nume, tu
poate omite „In” din numele blocului (de exemplu, „\p{BraillePatterns}”), dar pentru a fi sigur, este
probabil cel mai bine să folosiți întotdeauna „In”).

REF(...) In schimb Of SCALAR(...)
O referință la o referință se stringe acum ca „REF(0x81485ec)" în loc de
"SCALAR(0x81485ec)" pentru a fi mai consecvent cu valoarea returnată a ref ().

împachetați/despachetați D / F reciclate
Literele șablon de ambalare/despachetare nedocumentate D/F au fost reciclate pentru o utilizare mai bună: acum
ele reprezintă long double (dacă sunt susținute de platformă) și NV (Perl intern flotant
tip de punct). (Odinioară erau pseudonime pentru d/f, dar nu știai niciodată asta.)

glob() acum Returnează nume de fișiere in alfabetic comandă
Lista de nume de fișiere din glob() (sau <...>) este acum în mod implicit sortat alfabetic pentru a fi
compatibil cu csh (ceea ce sa întâmplat înainte în majoritatea platformelor Unix). (bsd_glob() face
încă sortați platforma nativ, ASCII sau EBCDIC, cu excepția cazului în care este specificat GLOB_ALPHASORT.) [561]

Deprecieri
· Semantica bless (REF, REF) a fost neclară și până când cineva nu dovedește că face ceva
sens, este interzis.

· Biblioteca învechită chat2 care nu ar fi trebuit niciodată să i se permită să scape de
laboratorul a fost scos din funcțiune.

· Folosind chdir("") sau chdir(undef) în loc de explicit chdir() este îndoielnic. Un eșec
(Gândește-te la chdir(unele_funcție()) poate duce la neintenționat chdir() la directorul principal,
prin urmare, acest comportament este depreciat.

· Încorporat dump() probabil că funcția a depășit cea mai mare parte din utilitatea sa. Miezul-
funcționalitatea de dumping va rămâne disponibilă în viitor ca un apel explicit la
„CORE::dump()”, dar în viitor lansează comportamentul unui apel necalificat „dump()”
s-ar putea schimba.

· Exemplele foarte prăfuite din directorul eg/ au fost eliminate. Sugestii pentru nou
exemple strălucitoare sunt binevenite, dar problema principală este că exemplele trebuie documentate,
testat și (cel mai important) întreținut.

· Secvențele de evadare (false) \8 și \9 oferă acum un avertisment opțional ("Nerecunoscut
scăpare trecută"). Nu este nevoie să \-escape niciun caracter „\w”.

· *glob{FILEHANDLE} este depreciat, utilizați *glob{IO}.

· Pachetul;" sintaxa („pachet” fără argument) a fost depreciată. Este
semantica nu a fost niciodată atât de clară, iar implementarea ei cu atât mai puțin. Daca ati folosit
această caracteristică pentru a interzice toate variabilele, cu excepția celor complet calificate, „utilizați strict;” in schimb.

· Caracteristicile regex POSIX neimplementate [[.cc.]] și [[=c=]] sunt încă recunoscute, dar
acum provoacă erori fatale. Comportamentul anterior de a le ignora implicit și
avertismentul dacă a fost solicitat era inacceptabil, deoarece, într-un fel, a promis în mod fals că
caracteristicile ar putea fi utilizate.

· În versiunile viitoare, modulele XS care nu sunt compatibile cu PerlIO pot deveni complet neacceptate.
Deoarece PerlIO este un înlocuitor drop-in pentru stdio la nivel de cod sursă, aceasta
nu ar trebui să fie o schimbare atât de drastică.

· Versiunile anterioare ale perl și unele lecturi ale unor secțiuni din Camel III implicau acest lucru
„:raw” „disciplina” a fost inversul lui „:crlf”. Dezactivarea „clrfness” este nu
suficient de lung pentru a face un flux cu adevărat binar. Deci stratul PerlIO „:raw” (sau
„disciplină”, pentru a folosi terminologia mai veche a cărții Camel) este acum definită formal ca
fiind echivalent cu binmode(FH) - care este, la rândul său, definit ca făcând orice este
necesar să treceți fiecare octet așa cum este, fără nicio traducere. În special binmode (FH)
- și, prin urmare, ":raw" - va dezactiva acum atât traducerea CRLF, cât și UTF-8 și va elimina
alte straturi (ex:codificare()) care ar modifica fluxul de octeți.

· Actuala implementare vizibilă de utilizator a pseudo-hash-urilor (utilizarea ciudată a primului
element de matrice) este depreciat începând cu Perl 5.8.0 și va fi eliminat în Perl
5.10.0, iar caracteristica va fi implementată diferit. Nu numai curentul este
interfață destul de urâtă, dar implementarea actuală încetinește matricea și hash-ul normal
utilizați destul de vizibil. Interfața pragma „câmpuri” va rămâne disponibilă. The
limitat hashuri interfața este de așteptat să fie interfața de înlocuire (vezi
Hash::Util). Dacă programele dvs. existente depind de implementarea de bază,
luați în considerare utilizarea Class::PseudoHash de la CPAN.

· Sintaxele „@a->[...]” și „%h->{...}” au fost acum depreciate.

· După ani de încercări, suidperl este considerat a fi prea complex pentru a fi luat în considerare vreodată
cu adevărat sigur. Este posibil ca funcționalitatea suidperl să fie eliminată într-o versiune viitoare.

· Modelul 5.005 fire (modulul „Fire”) este depreciat și se așteaptă să fie eliminat în
Perl 5.10. Codul multithread ar trebui migrat la noul model ithreads (vezi
fire, fire::shared și perlthrtut).

· Aliasurile majuscule, depreciate de mult timp, pentru operatorii de comparare a șirurilor de caractere (EQ, NE, LT,
LE, GE, GT) au fost acum eliminate.

· Caracteristicile tr///C și tr///U au fost eliminate și nu vor reveni; interfata
a fost o greseala. Îmi pare rău pentru asta. Pentru o funcționalitate similară, consultați pack('U0', ...) și
pack('C0', ...). [561]

· Perls anterior a tratat „sub foo (@bar)” ca echivalent cu „sub foo (@)”. Prototipurile
sunt acum verificate mai bine la compilare pentru sintaxa invalidă. Un avertisment opțional este
generat („Personaj ilegal în prototip...”), dar acesta poate fi actualizat la un fatal
eroare într-o versiune viitoare.

· Operațiunile „exec LIST” și „system LIST” produc acum avertismente asupra datelor contaminate și
în unele versiuni viitoare vor produce erori fatale.

· Comportamentul existent la localizarea matricelor legate și hash-urilor este greșit și va fi
schimbat într-o versiune viitoare, așa că nu vă bazați pe comportamentul existent. Consultați „Localizarea
Tied Arrays and Hashes este spart”.

Nucleu Îmbunătățiri


Unicode Recondiționare
Unicode în general ar trebui să fie acum mult mai utilizabil decât în ​​Perl 5.6.0 (sau chiar în 5.6.1).
Unicode poate fi folosit în tastele hash, Unicode în expresiile regulate ar trebui să funcționeze acum, Unicode
în tr/// ar trebui să funcționeze acum, Unicode în I/O ar trebui să funcționeze acum. Vezi perluniintro pentru
introducere și perlunicod pentru detalii.

· Baza de date de caractere Unicode care vine cu Perl a fost actualizată la Unicode 3.2.0.
Pentru mai multe informații, consultați http://www.unicode.org/ . [561+] (5.6.1 are UCD 3.0.1.)

· Pentru dezvoltatorii interesați de îmbunătățirea capabilităților Unicode ale Perl: aproape toate UCD
fișierele sunt incluse cu distribuția Perl în lib/unicore subdirectorul. The
cea mai notabilă omisiune, din considerente de spațiu, este baza de date Unihan.

· Au fost adăugate proprietățile \p{Blank} și \p{SpacePerl}. „Blank” este ca C
este gol (), adică conține doar „spațiu alb orizontal” (caracterul spațiu este,
linia nouă nu este), iar „SpacePerl” este echivalentul Unicode al lui „\s” (\p{Space}
nu este, deoarece include caracterul tabulatorului vertical, în timp ce „\s” nu include.)

Consultați „Noile proprietăți Unicode” mai devreme în acest document pentru informații suplimentare despre
modificări cu proprietățile Unicode.

PerlIO is Acum Mod implicit
· IO este acum realizat implicit prin PerlIO, mai degrabă decât prin „stdio” al sistemului. PerlIO permite
„straturi” să fie „împins” pe un mâner de fișier pentru a modifica comportamentul mânerului. Straturi
poate fi specificat la ora deschisă printr-o formă de deschidere cu 3 argumente:

deschide($fh,'>:crlf :utf8', $cale) || ...

sau pe mânerele deja deschise prin „binmode” extins:

binmode($fh,':encoding(iso-8859-7)');

Straturile încorporate sunt: ​​unix (nivel scăzut de citire/scriere), stdio (ca în Perls anterioare),
perlio (reimplementarea buffer-ului stdio într-o manieră portabilă), crlf (nu CRLF
<=> Traducerea „\n” ca pe Win32, dar disponibilă pe orice platformă). Un strat mmap poate fi
disponibil dacă platforma îl acceptă (mai ales Unix).

Straturile care urmează să fie aplicate implicit pot fi specificate prin pragma „deschisă”.

Consultați „Îmbunătățiri de instalare și configurare” pentru efectele PerlIO asupra dumneavoastră
numele arhitecturii.

· Dacă platforma dvs. acceptă furculiţă(), puteți utiliza forma de listă „deschis” pentru conducte. Pentru
exemplu:

deschide KID_PS, "-|", "ps", "aux" sau die $!;

furculita ps(1) comandă (fără a genera o coajă, deoarece există mai mult de trei
argumente la deschis()) și își citește ieșirea standard prin manerul fișierului „KID_PS”. Vedea
perlipc.

· Mânerele de fișiere pot fi marcate ca acceptând codificarea internă Perl a Unicode (UTF-8 sau
UTF-EBCDIC în funcție de platformă) printr-un pseudo strat „:utf8” :

deschide($fh,">:utf8","Uni.txt");

Notă pentru utilizatorii EBCDIC: pseudostratul „:utf8” este denumit în mod eronat pentru dvs. de atunci
nu este UTF-8 ceea ce vei primi, ci UTF-EBCDIC. Vezi perlunicod,
utf8 și http://www.unicode.org/unicode/reports/tr16/ pentru mai multe informatii. În
versiunile viitoare, această denumire se poate modifica. Consultați perluniintro pentru mai multe informații despre
UTF-8.

· Dacă variabilele de mediu (LC_ALL, LC_CTYPE, LANG) arată ca și cum doriți să utilizați UTF-8
(oricare dintre variabile se potrivește cu „/utf-?8/i”), mânerele dvs. STDIN, STDOUT, STDERR și
stratul deschis implicit (vezi deschis) sunt marcate ca UTF-8. (Această caracteristică, ca și altele noi
caracteristicile care combină Unicode și I/O, funcționează numai dacă utilizați PerlIO, dar asta este
implicit.)

Rețineți că, după aceasta, Perl chiar presupune că totul este UTF-8: de exemplu, dacă
un mâner de intrare nu este, probabil că Perl se va plânge foarte curând de datele de intrare
ca acest „UTF-8 malformat...” deoarece orice date vechi de opt biți nu sunt UTF-8 legale.

Notă pentru autorii de cod: dacă doriți să permiteți utilizatorilor să utilizeze UTF-8 ca implicit
codificare, dar în codul dvs. aveți încă fluxuri I/O pe opt biți (cum ar fi imagini sau zip
fișiere), trebuie să faceți în mod explicit deschis() or binmode() cu „:bytes” (vezi „deschidere” în
perlfunc și „binmode” în perlfunc), sau puteți folosi doar „binmode(FH)” (frumos pentru
compatibilitate anterioară pre-5.8.0).

· Mânerele de fișiere pot traduce codificări de caractere din/în formularul intern Unicode al Perl
citire/scriere prin „:codificare()" strat.

· Mânerele de fișiere pot fi deschise pentru fișierele „în memorie” păstrate în scalari Perl prin:

deschis($fh,'>', \$variabilă) || ...

· Fișierele temporare anonime sunt disponibile fără a fi nevoie să „utilizați FileHandle” sau altele
modul prin intermediul

deschide($fh,"+>", undef) || ...

Acesta este un undef literal, nu o valoare nedefinită.

firele
Noile fire de execuție („ithreads” pe scurt) implementarea multithreadingului, de
Arthur Bergman, înlocuiește vechea implementare „5.005 fire”. În modelul ithreads
orice partajare a datelor între fire trebuie să fie explicită, spre deosebire de modelul în care sunt date
partajarea era implicită. Vedeți fire și fire::shared și perlthrtut.

Ca parte a implementării ithreads-ului, Perl va folosi, de asemenea, orice necesar și detectabil
interfețe libc reintrante.

restrâns Hash-uri
Un hash restricționat este limitat la un anumit set de chei, nicio cheie în afara setului nu poate fi
adăugat. De asemenea, cheile individuale pot fi restricționate, astfel încât cheia să nu poată fi ștearsă și
valoarea nu poate fi modificată. Nu este implicată nicio sintaxă nouă: modulul Hash::Util este
interfață.

Sigur Semnale
Perl obișnuia să fie fragil, deoarece semnalele care soseau în momente inoportune puteau să se corupeze
Starea internă a lui Perl. Acum Perl amână gestionarea semnalelor până când este sigur (între
opcodes).

Această modificare poate avea efecte secundare surprinzătoare, deoarece semnalele nu mai întrerup Perl
imediat. Perl va termina mai întâi orice făcea, cum ar fi terminarea unui intern
operațiune (cum ar fi fel()) sau o operație externă (cum ar fi o operație I/O), și numai atunci
uitați-vă la orice semnale sosite (și înainte de a începe următoarea operațiune). Gata cu coruptia
stare internă, deoarece operațiunea curentă este întotdeauna terminată prima, dar semnalul poate
ia mai mult timp pentru a fi auzit. Rețineți că ieșirea din eventualele operațiuni de blocare
ar trebui să funcționeze, totuși.

Înțelegerea of Numere
În general, s-au întâmplat multe remedieri în domeniul înțelegerii numerelor de către Perl,
atât număr întreg cât și virgulă mobilă. Deoarece în multe sisteme parsarea standard a numărului
funcții precum „strtoul()” și „atof()” par să aibă erori, Perl încearcă să le rezolve
deficiențe. Acest lucru va duce, sperăm, la cifre mai precise.

Perl încearcă acum să utilizeze intern valori întregi în conversiile numerice și de bază
aritmetică (+ - * /) dacă argumentele sunt numere întregi și încearcă, de asemenea, să păstreze rezultatele
stocate intern ca numere întregi. Această schimbare duce adesea la ceva mai rapid și întotdeauna mai puțin
aritmetică cu pierderi. (Anterior, Perl prefera întotdeauna numerele cu virgulă mobilă în matematică.)

Arrays acum mereu interpola în ghilimele duble siruri [561]
În șirurile de caractere duble, matricele se interpolează acum, indiferent de ce. Comportamentul din mai devreme
versiunile de perl 5 a fost că tablourile s-ar interpola în șiruri de caractere dacă matricea ar fi fost
menționat înainte ca șirul să fie compilat, iar în caz contrar, Perl ar genera o compilare fatală.
eroare de timp. În versiunile 5.000 până la 5.003, eroarea a fost

Literal @example necesită acum bară oblică inversă

În versiunile 5.004_01 până la 5.6.0, eroarea a fost

În șir, @example acum trebuie scris ca \@example

Ideea aici a fost ca oamenii să-și facă obiceiul de a scrie „fred\@example.com” atunci când au
au vrut un semn literal „@”, așa cum au scris întotdeauna „Dă-mi înapoi $5” când
au vrut un semn literal „$”.

Începând cu 5.6.1, când Perl vede acum un semn „@” într-un șir între ghilimele, acesta mereu
încearcă să interpoleze o matrice, indiferent dacă matricea a fost sau nu folosită sau
declarat deja. Eroarea fatală a fost retrogradată la un avertisment opțional:

Posibilă interpolare neintenționată a @example în șir

Aceasta vă avertizează că „[e-mail protejat]„ se va transforma în „fred.com” dacă nu o faci
bară oblică inversă „@”. Vedea http://perl.plover.com/at-error.html pentru mai multe detalii despre
istorie aici.

Diverse Modificări
· AUTOLOAD este acum valoroasă, ceea ce înseamnă că puteți adăuga atributul :lvalue la AUTOLOAD
subrutine și puteți aloca valorii de returnare AUTOLOAD.

· $Config{byteorder} (și BYTEORDER corespunzătoare în config.h) a fost greșit anterior
în platforme dacă sizeof(long) era 4, dar sizeof(IV) era 8. Ordinea octetilor a fost doar
sizeof(long) bytes long (1234 sau 4321), dar acum este corect sizeof(IV) bytes long,
(12345678 sau 87654321). (Această problemă nu a afectat platformele Windows.)

De asemenea, $Config{byteorder} este acum calculat dinamic - acest lucru este mai robust cu „fat
binare" unde o imagine executabilă conține fișiere binare pentru mai mult de un binar
platformă și la compilare încrucișată.

· „perl -d:Module=arg,arg,arg” funcționează acum (anterior nu se putea trece în mai multe
argumente.)

· „do” urmat de un cuvânt gol acum asigură că acest cuvânt nu este un cuvânt cheie (pentru a evita un
bug unde „do q(foo.pl)” a încercat să apeleze o subrutină numită „q”). Aceasta înseamnă că pentru
exemplu în loc de „do format()” trebuie să scrieți „do &format()”.

· Încorporat dump() acum dă un avertisment opțional „dump() mai bine scris ca
CORE::dump()”, ceea ce înseamnă că implicit „dump(...)” este rezolvat ca încorporat dump()
care aruncă nucleul și anulează, nu ca (posibil) „sub dump” definit de utilizator. Pentru a apela la
din urmă, calificați apelul drept „&dump(...)”. (Întregul dump() caracteristica este de luat în considerare
depreciat și, posibil, eliminat/modificat în versiunile viitoare.)

· chomp() si a toca() sunt acum anulabili. Rețineți, totuși, că prototipul lor (așa cum este dat
de "prototype("CORE::chomp")" este nedefinit, deoarece nu poate fi exprimat și
prin urmare, nu se poate scrie cu adevărat înlocuiri pentru a suprascrie aceste built-in.

· Blocurile END sunt acum rulate chiar dacă ieșiți/morați într-un bloc BEGIN. Pe plan intern,
execuția blocurilor END este acum controlată de PL_exit_flags și PERL_EXIT_DESTRUCT_END.
Acest lucru permite noul comportament pentru embeders Perl. Aceasta va fi implicită în 5.10. Vedea
perlembed.

· Formatele acceptă acum câmpuri zecimale cu zero.

· Deși „nu ar trebui să faci asta”, a fost posibil să scrii cod care depinde de Perl
ordinea cheilor hashed (Data::Dumper face acest lucru). Noul algoritm „One-at-a-Time” produce
o ordine diferită a cheilor cu hash. Mai multe detalii găsiți în „Îmbunătățiri de performanță”.

· lstat(FILEHANDLE) dă acum un avertisment deoarece operația nu are sens. In viitor
lansări, aceasta poate deveni o eroare fatală.

· Erori de sintaxă false generate în anumite situații, când glob() cauzat File::Glob
pentru a fi încărcate pentru prima dată, au fost remediate. [561]

· Subrutinele Lvalue pot returna acum „undef” în contextul listei. Cu toate acestea, valoarea l
caracteristica subrutinei rămâne încă experimentală. [561+]

· A fost restabilit un avertisment pierdut „Nu pot declara... dereferința în mine” (Perl a avut-o
mai devreme, dar s-a pierdut în versiunile ulterioare.)

· A fost introdusă o nouă variabilă specială de expresie regulată: $^N, care conține
cel mai recent grup închis (submeci).

· „fără modul;” nu produce o eroare chiar dacă Modulul nu are un unimport()
metodă. Acest lucru este paralel cu comportamentul de „utilizare” față de „import”. [561]

· Operatorii de comparare numerică returnează „undef” dacă oricare dintre operanzi este un NaN.
Anterior comportamentul era nespecificat.

· „nostru” poate avea acum un atribut experimental opțional „unic” care afectează cât de global
variabilele sunt partajate între mai mulți interpreți, vezi „nostru” în perlfunc.

· Următoarele funcții încorporate sunt acum suprascrise: fiecare(), chei(), pop (), Apăsați(),
schimb(), lipitură(), unshift(). [561]

· „pack() / unpack()” poate acum grupa litere șablon cu „()” și apoi se aplică
modificatori de repetare/numărare pe grupuri.

· „pack() / unpack()” poate procesa acum tipurile numerice interne Perl: IVs, UVs, NVs--
și, de asemenea, duble lungi, dacă sunt susținute de platformă. Literele șablon sunt „j”,
„J”, „F” și „D”.

· „pack('U0a*', ...)” poate fi acum folosit pentru a forța un șir la UTF-8.

· __PACKAGE__ meu $obj acum funcționează. [561]

· POSIX::sleep() acum returnează numărul de nedormite secunde (după cum spune standardul POSIX),
spre deosebire de CORE::sleep() care returnează numărul de secunde dormite.

· printf() si sprintf() acum acceptă reordonarea parametrilor folosind „%\d+\$” și
Sintaxele „*\d+\$”. De exemplu

printf „%2\$s %1\$s\n”, „foo”, „bar”;

va tipări „bar foo\n”. Această caracteristică ajută la scrierea de software internaționalizat și
în general când ordinea parametrilor poate varia.

· Prototipul (\&) funcționează acum corect. [561]

· prototipul(\[$@%&]) este acum disponibil pentru a crea implicit referințe (utile pentru
exemplu dacă doriți să emulați cravată() interfață).

· O nouă opțiune de linie de comandă, „-t” este disponibilă. Este fratele mai mic al lui "-T":
în loc să moară din cauza încălcărilor de pată, se dau avertismente lexicale. Acest is a însemnat
as a temporar depanare ajutor în timp ce asigurarea il cod of vechi moştenire aplicatii. Acest
is nu a substitui pentru -T.

· În alte știri de pată, acum au fost luate în considerare și „LISTA executivului” și „LISTA sistemului”.
riscant (gândiți-vă la „exec @ARGV”: poate porni orice program cu orice argument), iar acum
formele respective provoacă un avertisment sub avertismente lexicale. Ar trebui să spălați cu atenție
argumente care să le garanteze validitatea. În versiunile viitoare ale Perl formularele vor
devin erori fatale, așa că luați în considerare începerea spălării acum.

· Interfețele hash legate sunt acum necesare pentru a avea metodele EXISTS și DELETE (fie
proprii sau moştenite).

· Dacă tr/// doar numără caractere, nu încearcă să-și modifice ținta.

· dezlega() va apela acum un UNTIE() cârlig dacă există. Vezi perltie pentru detalii. [561]

· „utime” în perlfunc acceptă acum „utime undef, undef, @files” pentru a schimba fișierul
marcaje temporale la ora curentă.

· Regulile de permitere a caracterelor de subliniere (subliniere) în constantele numerice au fost relaxate
și simplificat: acum puteți avea pur și simplu un caracter de subliniere între cifre.

· În loc să te bazezi pe argv[0] al lui C (care poate să nu conțină o cale completă) unde
posibil $^X este acum setat prin întrebarea sistemului de operare. (de exemplu, citind /proc/self/exe
pe Linux, /proc/curproc/file pe FreeBSD)

· O nouă variabilă, „${^TAINT}”, indică dacă modul taint este activat.

· Acum puteți trece peste Citeste linia() încorporat, iar aceasta suprascrie și pe
operator bracket unghi.

· Opțiunile din linia de comandă -s și -F sunt acum recunoscute pe linia shebang (#!).

· Utilizarea modificatorului de potrivire „/c” fără un modificator „/g” însoțitor determină un nou
avertisment: „Folosirea modificatorului /c este lipsită de sens fără /g”.

Utilizarea lui „/c” în substituții, chiar și cu „/g”, determină „Utilizarea modificatorului /c este
fără sens în s///”.

Folosirea „/g” cu „split” determină „Folosirea modificatorului /g este lipsită de sens în split”.

· A fost adăugat suport pentru subrutina specială „CLONE”. Cu ithreads, când un nou
este creat firul de execuție, toate datele Perl sunt clonate, totuși datele non-Perl nu pot fi clonate
automat. În „CLONE” poți face tot ce trebuie să faci, cum ar fi, de exemplu, gestionarea
clonarea datelor non-Perl, dacă este necesar. „CLONE” va fi executat o dată la fiecare
pachet care îl are definit sau moștenit. Se va numi în contextul noului
fir, astfel încât toate modificările se fac în noua zonă.

Vezi perlmod

Module si pragmata


Nou Module si pragmata
· „Attribute::Handlers”, inițial de Damian Conway și întreținut acum de Arthur
Bergman, permite unei clase să definească handlere de atribute.

pachet MyPack;
utilizați Attribute::Handlers;
sub Wolf :ATTR(SCALAR) { print "howl!\n" }

# mai târziu, într-un pachet folosind sau moștenind de la MyPack...

MyPack-ul meu $Fluffy : Wolf; # va fi apelat manevrătorul de atribute Wolf

Atât variabilele, cât și rutinele pot avea handler-uri de atribute. Manipulatorii pot fi specifici
tip (SCALAR, ARRAY, HASH sau CODE) sau specific fazei exacte de compilare
(BEGIN, CHECK, INIT sau END). Vezi Atribut::Handlers.

· „B::Concise”, de Stephen McCamant, este un nou backend al compilatorului pentru a merge pe Perl
arbore de sintaxă, imprimând informații concise despre operațiuni. Ieșirea este foarte personalizabilă. Vedea
B::Concis. [561+]

· Noile pragma bignum, bigint și bigrat, de la Tels, implementează bignum transparent
suport (folosind backend-urile Math::BigInt, Math::BigFloat și Math::BigRat).

· „Class::ISA”, de Sean Burke, este un modul pentru raportarea căii de căutare pentru o clasă
arborele ISA. Vezi Clasa::ISA.

· „Cwd” are acum o personalitate împărțită: dacă este posibil, se folosește o extensie XS, (acest lucru va
sper să fie mai rapid, mai sigur și mai robust), dar dacă nu este posibil, familiar
Se folosește implementarea Perl.

· „Devel::PPPort”, inițial de Kenneth Albanowski și întreținut acum de Paul Marquess,
a fost adaugat. Este folosit în principal de „h2xs” pentru a îmbunătăți portabilitatea modulelor XS
între diferite versiuni de Perl. Vezi Devel::PPPort.

· „Digest”, modulul de interfață pentru calcularea rezumatelor (sume de control), de la Gisle Aas, are
fost adăugată. Vezi Digest.

· „Digest::MD5” pentru calcularea rezumatelor MD5 (sume de control), așa cum este definit în RFC 1321, din
Gisle Aas, a fost adăugată. Vezi Digest::MD5.

utilizați Digest::MD5 'md5_hex';

$digest = md5_hex("Camila insetata");

print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1

NOTĂ: modulul de compatibilitate inversă „MD5” nu este inclus în mod deliberat din moment ce este
utilizarea ulterioară este descurajată.

Vezi și PerlIO::via::QuotedPrint.

· „Encode”, inițial de Nick Ing-Simmons și întreținut acum de Dan Kogai, oferă a
mecanism de traducere între diferite codificări de caractere. Suport pentru Unicode,
ISO-8859-1 și ASCII sunt compilate în modul. Mai multe alte codificări (cum ar fi
restul ISO-8859, CP*/Win*, Mac, KOI8-R, trei variante EBCDIC, chineză,
Codificări japoneze și coreene) sunt incluse și pot fi încărcate în timpul execuției. (Pentru spațiu
considerente, cele mai mari codificări chineze au fost separate în propriul lor CPAN
modul, Encode::HanExtra, pe care Encode îl va folosi dacă este disponibil). Consultați Codificare.

Orice codificare acceptată de modulul Encode este disponibilă și pentru „:codificare()" strat
dacă se utilizează PerlIO.

· „Hash::Util” este interfața către nou limitat hashuri caracteristică. (Implementat de
Jeffrey Friedl, Nick Ing-Simmons și Michael Schwern.) Vezi Hash::Util.

· „I18N::Langinfo” poate fi folosit pentru a interoga informații despre local. Vezi I18N::Langinfo.

· „I18N::LangTags”, de Sean Burke, are funcții pentru a trata limbajul în stil RFC3066
Etichete. Vezi I18N::LangTags.

· „ExtUtils::Constant”, de Nicholas Clark, este un nou instrument pentru scriitorii de extensii pentru
generând cod XS pentru a importa constantele antetului C. Vezi ExtUtils::Constant.

· „Filter::Simple”, de Damian Conway, este un frontend ușor de utilizat pentru Filter::Util::Call.
Vezi Filtru::Simple.

# în MyFilter.pm:

pachet MyFilter;

folosește Filter::Simple sub {
în timp ce (my ($de la, $la) = îmbinare @_, 0, 2) {
s/$de la/$la/g;
}
};

1;

# în codul utilizatorului:

utilizați MyFilter qr/red/ => „verde”;

imprimați „roșu\n”; # acest cod este filtrat, se va tipări „verde\n”
imprimă „plictisit\n”; # acest cod este filtrat, va tipări „bogreen\n”

fără MyFilter;

imprimați „roșu\n”; # acest cod nu este filtrat, va tipări „roșu\n”

· „File::Temp”, de Tim Jenness, permite crearea de fișiere și directoare temporare în
un mod ușor, portabil și sigur. Vezi File::Temp. [561+]

· „Filter::Util::Call”, de Paul Marquess, vă oferă cadrul pentru a scrie
sursă Filtre în Perl. Pentru cele mai multe utilizări, interfața Filter::Simple trebuie să fie
preferat. Vezi Filtru::Util::Apel.

· „dacă”, de Ilya Zakharevich, este o nouă pragma pentru includerea condiționată a modulelor.

· libnet, de Graham Barr, este o colecție de module perl5 legate de rețea
programare. Vedeți Net::FTP, Net::NNTP, Net::Ping (nu face parte din libnet, dar are legătură),
Net::POP3, Net::SMTP și Net::Time.

Instalarea Perl lasă libnet neconfigurat; utilizare libnetcfg pentru a-l configura.

· „List::Util”, de Graham Barr, este o selecție de subrutine de listă cu utilitate generale, cum ar fi
as sumă(), min(), primul() și amesteca(). Vezi Lista::Util.

· „Locale::Constants”, „Locale::Country”, „Locale::Currency” „Locale::Language” și
Locale::Script, de Neil Bowers, au fost adăugate. Ei furnizează codurile pentru diverse
standarde locale, cum ar fi „fr” pentru Franța, „usd” pentru dolar american și „ja” pentru japoneză.

utilizați Locale::Țară;

$țară = cod2țară('jp'); # $country primește „Japonia”
$cod = country2code('Norvegia'); # $code primește „nu”

Vedeți Locale::Constants, Locale::Country, Locale::Currency și Locale::Language.

· „Locale::Maketext”, de Sean Burke, este un cadru de localizare. Vedeți Locale::Maketext,
și Locale::Maketext::TPJ13. Acesta din urmă este un articol despre localizarea software-ului,
publicat inițial în The Perl Journal #13 și republicat aici cu amabil
permisiune.

· „Math::BigRat” pentru numere mari raționale, pentru a însoți Math::BigInt și Math::BigFloat,
de la Tels. Vezi Math::BigRat.

· „Memoize” vă poate face funcțiile mai rapide schimbând spațiu cu timp, de la Mark-Jason
Dominus. Vezi Memoize.

· „MIME::Base64”, de Gisle Aas, vă permite să codificați date în base64, așa cum este definit în RFC
2045 - MIMA (Multifunctiv Internet Mail Extensii).

utilizați MIME::Base64;

$encoded = encode_base64('Aladdin:deschide susan');
$decodificat = decode_base64($codat);

printează $codat, „\n”; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

Vezi MIME::Base64.

· „MIME::QuotedPrint”, de Gisle Aas, vă permite să codificați datele în format citat-printable
codificare, așa cum este definită în RFC 2045 - MIMA (Multifunctiv Internet Mail Extensii).

utilizați MIME::QuotedPrint;

$encoded = encode_qp("\xDE\xAD\xBE\xEF");
$decodificat = decode_qp($codat);

printează $codat, „\n”; # "=DE=AD=BE=EF\n"
print $decoded, "\n"; # „\xDE\xAD\xBE\xEF\n”

Vezi și PerlIO::via::QuotedPrint.

· „NEXT”, de Damian Conway, este o pseudo-clasă pentru redistribuirea metodei. Vezi URMĂTORUL.

· „deschis” este o nouă pragma pentru setarea straturilor I/O implicite pentru deschis().

· „PerlIO::scalar”, de Nick Ing-Simmons, oferă implementarea IO la „în
memorie" scalari Perl așa cum s-a discutat mai sus. De asemenea, servește ca exemplu de încărcare
Stratul PerlIO. Alte posibilități viitoare includ PerlIO::Array și PerlIO::Code. Vedea
PerlIO::scalar.

· „PerlIO::via”, de Nick Ing-Simmons, acționează ca un strat PerlIO și înfășoară stratul PerlIO
funcționalitate oferită de o clasă (de obicei implementată în codul Perl).

· „PerlIO::via::QuotedPrint”, de Elizabeth Mattijsen, este un exemplu de „PerlIO::via”
clasă:

utilizați PerlIO::via::QuotedPrint;
deschide($fh,">:via(QuotedPrint)",$cale);

Acest lucru va converti automat toate rezultatele în $fh în Quoted-Printable. Vedea
PerlIO::via și PerlIO::via::QuotedPrint.

· „Pod::ParseLink”, de Russ Allbery, a fost adăugat, pentru a analiza linkurile L<> în poduri ca
descrise în noul perlpodspec.

· „Pod::Text::Overstrike”, de Joe Smith, a fost adăugat. Convertește datele POD în
text cu depășire formatat. Vedeți Pod::Text::Overstrike. [561+]

· „Scalar::Util” este o selecție de subrutine scalare de utilitate generală, cum ar fi
binecuvântat(), reftype() și contaminat(). Vezi Scalar::Util.

· „sortarea” este o nouă pragma de control al comportamentului fel().

· „Storable” oferă persistență structurilor de date Perl permițând stocarea și
preluarea datelor Perl către și din fișiere într-un format binar rapid și compact. pentru că
de fapt, Storable realizează serializarea structurilor de date Perl, cu el puteți și
clonează structuri de date ierarhice profunde. Storable a fost creat inițial de Raphael
Manfredi, dar acum este întreținut de Abhijit Menon-Sen. Capacitatea de stocare a fost îmbunătățită
pentru a înțelege cele două noi funcții hash, chei Unicode și hash restricționate. Vedea
Depozitabil.

· S-a adăugat „Switch”, de Damian Conway. Doar spunând

utilizați Comutator;

aveți „comutator” și „caz” disponibile în Perl.

utilizați Comutator;

comutator ($val) {

cazul 1 { tipăriți „numărul 1” }
case "a" { print "șir a" }
caz [1..10,42] { tipăriți „numărul din listă” }
case (@array) { printează „numărul din listă” }
caz /\w+/ { tipăriți „model” }
case qr/\w+/ { tipăriți „model” }
caz (%hash) { printează „intrare în hash”}
caz (\%hash) { printează „intrare în hash” }
caz (\&sub) { print "arg to subroutine" }
else { print "cazul anterior nu este adevărat" }
}

Consultați Comutare.

· „Test::More”, de Michael Schwern, este încă un cadru pentru scrierea scripturilor de testare,
mai extins decât Test::Simple. Vezi Test::Mai mult.

· „Test::Simple”, de Michael Schwern, are utilități de bază pentru scrierea testelor. Vedea
Test::Simplu.

· „Text::Balanced”, de Damian Conway, a fost adăugat, pentru extragerea textului delimitat
secvențe din șiruri.

utilizați Text::Balanced 'extract_delimited';

($a, $b) = extract_delimited("'niciodată să nu spui niciodată', el nu a spus niciodată", "'", '');

$a va fi „„niciodată să nu spui niciodată”, $b va fi „, el nu a spus niciodată”.

În plus față de extract_delimited(), există, de asemenea extract_bracketed(),
extract_quotelike(), extract_codeblock(), extract_variable(), extract_tagged(),
extract_multiple(), gen_delimited_pat() și gen_extract_tagged(). Cu acestea, tu
poate implementa algoritmi de parsare destul de avansati. Vezi Text::Echilibrat.

· „threads”, de Arthur Bergman, este o interfață cu firele de execuție. Interpret
threads (ithreads) este noul model de thread introdus în Perl 5.6 dar disponibil numai
ca interfață internă pentru scriitorii de extensii (și pentru Win32 Perl pentru „fork()”
emulare). Vedeți fire, fire::shared și perlthrtut.

· „threads::shared”, de Arthur Bergman, permite partajarea datelor pentru firele de execuție.
Vezi firele::shared.

· „Tie::File”, de Mark-Jason Dominus, asociază o matrice Perl cu liniile unui fișier.
Vezi Tie::File.

· „Tie::Memoize”, de Ilya Zakharevich, oferă hashuri încărcate la cerere. Vedea
Cravată::Memoize.

· „Tie::RefHash::Nestable”, de Edward Avis, permite stocarea referințelor hash (spre deosebire de
standard Tie::RefHash) Modulul este conținut în Tie::RefHash. Vedea
Tie::RefHash.

· „Time::HiRes”, de Douglas E. Wegscheid, oferă sincronizare de înaltă rezoluție (ualarm,
dormiți și obțineți ora zilei). Vezi Time::HiRes.

· „Unicode::UCD” oferă o interfață de interogare la baza de date de caractere Unicode. Vedea
Unicode::UCD.

· „Unicode::Collate”, de SADAHIRO Tomoyuki, implementează UCA (Unicode Collation)
Algoritm) pentru sortarea șirurilor Unicode. Consultați Unicode::Collate.

· „Unicode::Normalize”, de SADAHIRO Tomoyuki, implementează diverse Unicode
forme de normalizare. Vezi Unicode::Normalize.

· „XS::APItest”, de Tim Jenness, este o extensie de testare care exersează API-urile XS. În prezent
este testat doar „printf()”: cum să scoateți diferite tipuri de date de bază din XS.

· „XS::Typemap”, de Tim Jenness, este o extensie de testare care exersează hărți de tip XS.
Nu se instalează nimic, dar codul merită studiat pentru scriitorii de extensii.

Actualizat Și Îmbunătățit Module si pragmata
· Următoarele module suportate independent au fost actualizate la cele mai noi versiuni
din CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp, Getopt::Long, Math::BigFloat,
Math::BigInt, pachetul de podlatori (Pod::Man, Pod::Text), Pod::LaTeX [561+],
Pod::Parser, Stocabil, Termen::ANSColor, Test, Text-Tabs+Wrap.

· atribute::reftype() acum lucrează pe argumente legate.

· AutoLoader poate fi acum dezactivat cu „fără AutoLoader;”.

· B::Deparse a fost îmbunătățit semnificativ de Robin Houston. Acum poate pleca
aproape toată suita de teste standard (pentru ca testele să reușească în continuare). Este un
faceți targetul „test.deparse” pentru a încerca acest lucru.

· Carp are acum o documentație de interfață mai bună, iar interfața @CARP_NOT a fost
adăugat pentru a obține control opțional asupra unde erorile sunt raportate independent de @ISA, de
Ben Tilly.

· Class::Struct poate defini acum clasele în timpul compilării.

· Class::Struct atribuie acum elementul array/hash dacă accesorul este apelat cu un
elementul matrice/hash ca soare a susținut.

· Valoarea de returnare a Cwd::fastcwd() acum este contaminat.

· Data::Dumper are acum o opțiune de sortare a hashurilor.

· Data::Dumper are acum o opțiune de a descărca referințele de cod folosind B::Deparse.

· DB_File acceptă acum versiuni mai noi Berkeley DB, printre alte îmbunătățiri.

· Devel::Peek are acum o interfață pentru statisticile memoriei Perl (aceasta funcționează numai dacă
utilizați malloc-ul lui perl și dacă ați compilat cu depanare).

· Modulul de engleză poate fi folosit acum fără performanța infama lovită de a spune

utilizați engleza „-no_match_vars”;

(Presupunând, desigur, că nu aveți nevoie de variabilele supărătoare „$`”, $& sau
„$’”.) De asemenea, a introdus aliasurile în limba engleză @LAST_MATCH_START și @LAST_MATCH_END pentru
„@-” și „@+”.

· ExtUtils::MakeMaker a fost curățat și remediat în mod semnificativ. Versiunea îmbunătățită
a fost, de asemenea, retroportat la versiunile anterioare ale Perl și trimis la CPAN, astfel încât
versiunile anterioare se pot bucura de remedieri.

· Argumentele lui WriteMakefile() în Makefile.PL sunt verificate acum mult mai mult
cu grijă decât înainte. Acest lucru poate provoca noi avertismente atunci când modulele sunt instalate.
Consultați ExtUtils::MakeMaker pentru mai multe detalii.

· ExtUtils::MakeMaker folosește acum File::Spec intern, ceea ce, sperăm, duce la o mai bună
portabilitate.

· Fcntl, Socket și Sys::Syslog au fost rescrise de Nicholas Clark pentru a utiliza noul
secțiunea de expediere constantă a stilului (vezi ExtUtils::Constant). Asta înseamnă că o vor face
fii mai robust și, sperăm, mai rapid.

· Fișier::Găsiți acum chdir()este corect atunci când urmăriți legăturile simbolice. [561]

· Fișier::Find are acum apeluri pre- și post-procesare. De asemenea, se schimbă corect
directoare atunci când urmăresc legături simbolice. Apeluri inverse (obraznic) care ies cu „next;”
în loc de „întoarcerea”; acum lucreaza.

· File::Find este acum (din nou) reintrant. De asemenea, a fost făcut mai portabil.

· Avertismentele emise de File::Find aparțin acum propriei categorii. Poti
activați/dezactivați-le cu „utilizați/fără avertismente „File::Find”;”.

· Fișier::Glob::glob() a fost redenumit Fișier::Glob::bsd_glob() pentru că numele se ciocnește
cu încorporat glob(). Numele mai vechi este încă disponibil pentru compatibilitate, dar este
depreciat. [561]

· File::Glob acceptă acum constanta „GLOB_LIMIT” pentru a limita dimensiunea listei returnate
de nume de fișiere.

· IPC::Open3 permite acum utilizarea descriptorilor numerici de fișiere.

· IO::Socket are acum un atmark() metoda, care returnează adevărat dacă soclul este poziționat
la marcajul în afara benzii. Metoda este, de asemenea, exportabilă ca a sockatmark() Funcția.

· IO::Socket::INET nu a reușit să deschidă portul specificat dacă numele serviciului nu a fost cunoscut.
Acum folosește corect numărul portului furnizat așa cum este. [561]

· IO::Socket::INET are suport pentru opțiunea ReusePort (dacă platforma dvs. o acceptă).
Opțiunea Reutilizare are acum un alias, ReuseAddr. Pentru claritate, poate doriți să preferați
ReutilizareAddr.

· IO::Socket::INET acceptă acum o valoare zero pentru „LocalPort” (înseamnă de obicei că
sistemul de operare va alcătui unul.)

· „utilizați lib” acum funcționează identic cu @INC. Se elimină directoarele cu „fără lib” acum
funcționează.

· Math::BigFloat și Math::BigInt au suferit o rescrie completă de către Tels. Ei sunt acum
magnitudini mai repede și acceptă diverse biblioteci Bignum, cum ar fi GMP și PARI ca
backend-urile lor.

· Math::Complex tratează inf, NaN etc., mai bine.

· Net::Ping a fost îmbunătățit considerabil de Rob Brown: multihoming este acum acceptat,
Funcționalitatea Win32 este mai bună, acum există funcționalitate de măsurare a timpului (opțional
de înaltă rezoluție folosind Time::HiRes), iar acum există un protocol „extern” care utilizează
Net::Ping::Modul extern care rulează utilitarul ping extern și analizează
ieșire. O versiune de Net::Ping::External este disponibilă în CPAN.

Rețineți că unele dintre testele Net::Ping sunt dezactivate atunci când rulează sub Perl
distribuție deoarece nu se poate presupune unul sau mai multe dintre următoarele: port echo activat
la localhost, conectivitate completă la Internet sau firewall-uri simpatice. Puteți seta
variabila de mediu PERL_TEST_Net_Ping la „1” (unul) înainte de a rula testul Perl
suită pentru a activa toate testele Net::Ping.

· POSIX::sigaction() este acum mult mai flexibilă și mai robustă. Acum puteți instala coderef
handlere, handlere „DEFAULT” și „IGNORE”, instalarea de handlere noi nu a fost atomică.

· În Safe, %INC este acum localizat într-un compartiment Safe, astfel încât utilizarea/necesită lucru.

· În SDBM_File de pe platformele DOSish, unele chei au dispărut din cauza lipsei de suport
pentru dosare cu „găuri”. A fost adăugată o soluție pentru problema.

· În Căutare::Dict se poate avea acum un cârlig de pre-procesare pentru liniile căutate.

· Modulul Shell are acum o interfață OO.

· În Sys::Syslog există acum un mecanism de failover care va trece prin alternativă
mecanismele de conectare până când mesajul este înregistrat cu succes.

· Modulul de testare a fost îmbunătățit semnificativ.

· Ora::Local::timelocal() nu mai face față fracțiilor de secundă. Motivul este
asta nici nu o face ora locala() și timelocal() si ora locala() ar trebui să fie
inverse unul altuia.

· Pragma vars acceptă acum declararea variabilelor complet calificate. (Ceva care
„nostru()” nu acceptă și nu va accepta.)

· Spațiul de nume „utf8::” (ca în pragma) oferă diverse funcții apelabile prin Perl pentru
oferă acces la nivel scăzut la reprezentarea internă Unicode a Perl. În acest moment
lungime() a fost implementat.

Utilitate Modificări


· Modul Emacs perl (emacs/cperl-mode.el) a fost actualizat la versiunea 4.31.

· emacs/e2ctags.pl acum este mult mai rapid.

· „enc2xs” este un instrument pentru persoanele care își adaugă propriile codificări la modulul Encode.

· „h2ph” acceptă acum trigrafele C.

· „h2xs” produce acum un șablon README.

· „h2xs” folosește acum „Devel::PPPort” pentru o mai bună portabilitate între diferite versiuni ale
Perl.

· „h2xs” folosește noul modul ExtUtils::Constant care va afecta nou creat
extensii care definesc constante. Deoarece noul cod este mai corect (dacă aveți două
constante în care prima este un prefix al celei de-a doua, prima constantă nu
a fost definit), mai puțin cu pierderi (folosește numere întregi pentru constanta întregă, spre deosebire de vechea
cod care a folosit numere în virgulă mobilă chiar și pentru constante întregi) și ușor
mai rapid, poate doriți să luați în considerare regenerarea codului de extensie (noua schemă
face regenerarea ușoară). h2xs suportă acum și trigrafele C.

· „libnetcfg” a fost adăugat pentru a configura libnet.

· „perlbug” este acum mult mai robust. De asemenea, trimite raportul de eroare la perl.org, nu
perl.com.

· „perlcc” a fost rescris și interfața sa de utilizator (adică, linia de comandă) este mult
mai mult ca cel al compilatorului Unix C, cc. (Instrumentele perlbc au fost eliminate. Utilizați
„perlcc -B” în schimb.) notițe acea perlcc is încă luate în considerare foarte experimental si
nesuportat. [561]

· „perlivp” este un nou utilitar pentru procedura de verificare a instalării care poate fi rulat oricând
după instalarea Perl.

· „piconv” este o implementare a utilitarului de conversie a caracterelor „iconv”,
demonstrând noul modul Encode.

· „pod2html” permite acum specificarea unui director cache.

· „pod2html” produce acum XHTML 1.0.

· „pod2html” înțelege acum POD scris folosind diferite terminații de linie (PC-like CRLF
față de LF asemănător Unix versus CR asemănător MacClassic).

· „s2p” a fost complet rescris în Perl. (Este de fapt o implementare completă a
sed în Perl: puteți utiliza funcționalitatea sed folosind utilitarul „psed”.)

· „xsubpp” înțelege acum documentația POD încorporată în fișierele *.xs. [561]

· „xsubpp” acceptă acum cuvântul cheie OUT.

Nou Documentație


· perl56delta detaliază modificările dintre ediția 5.005 și versiunea 5.6.0.

· perlclib documentează înlocuirile interne pentru funcțiile standard de bibliotecă C.
(Interesant doar pentru scriitorii de extensii și hackerii de bază Perl.) [561+]

· perldebtut este un tutorial de depanare Perl. [561+]

· perlebcdic conține considerații pentru rularea Perl pe platformele EBCDIC. [561+]

· perlintro este o introducere blândă în Perl.

· perliol documentează elementele interne ale PerlIO cu straturi.

· perlmodstyle este un ghid de stil pentru scrierea modulelor.

· perlnewmod spune despre scrierea și trimiterea unui nou modul. [561+]

· perlpacktut este o ambalaj() tutorial.

· perlpod a fost rescris pentru a fi mai clar și pentru a înregistra cele mai bune practici adunate
de-a lungul anilor.

· perlpodspec este o specificație mai formală a formatului pod, de interes în principal pentru
scriitori de aplicații pod, nu pentru cei care scriu în pod.

· perlretut este un tutorial de expresii regulate. [561+]

· perlrequick este un ghid de pornire rapidă a expresiilor regulate. Da, mult mai repede decât
perlretut. [561]

· perltodo a fost actualizat.

· perltootc a fost redenumit ca perltooc (pentru a nu intra în conflict cu perltoot în
sisteme de fișiere limitate la nume „8.3”).

· perluniintro este o introducere în utilizarea Unicode în Perl. (perlunicod este mai mult un
referințe detaliate și informații de bază)

· perlutil explică utilitarele liniei de comandă împachetate cu distribuția Perl.
[561 +]

Următoarele documente specifice platformei sunt disponibile înainte de instalare ca
CITEȘTE-MĂ.platformă, iar după instalare ca perlplatformă:

perlaix perlamiga perlapollo perlbeos perlbs2000
perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux
perlhurd perlirix perlmachten perlmacos perlmint perlmpeix
perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
perltru64 perluts perlvmesa perlvms perlvos perlwin32

Aceste documente detaliază de obicei unul sau mai multe dintre următoarele subiecte: configurare,
construirea, testarea, instalarea și, uneori, utilizarea Perl pe platforma menționată.

Utilizatorii Perl din Asia de Est sunt acum bineveniți în propriile limbi: README.jp (japoneză),
README.ko (coreeană), README.cn (chineză simplificată) și README.tw (chineză tradițională),
care sunt scrise în pod normal, dar codificate în EUC-JP, EUC-KR, EUC-CN și Big5. Aceste
va fi instalat ca

perljp perlko perlcn perltw

· Documentația pentru platforma POSIX-BC se numește „BS2000”, pentru a evita confuziile
cu modulul Perl POSIX.

· Documentația pentru platforma WinCE se numește perlce (README.ce în sursă
kit de coduri), pentru a evita confuzia cu documentația perlwin32 pe 8.3-restricted
sisteme de fișiere.

Performanţă Îmbunătățiri


· Hartă() ar putea deveni patologic lent atunci când lista de rezultate pe care o generează este mai mare decât
lista surselor. Performanța a fost îmbunătățită pentru scenariile comune. [561]

· fel() este, de asemenea, complet reintrant, în sensul că funcția de sortare poate ea însăși apela
fel(). Acest lucru nu a funcționat în mod fiabil în versiunile anterioare. [561]

· fel() a fost modificat pentru a utiliza în principal mergesort intern, spre deosebire de
sortare rapidă mai devreme. Pentru liste foarte mici, acest lucru poate duce la sortarea puțin mai lentă
ori, dar în general accelerarea ar trebui să fie de cel puțin 20%. Bonusurile suplimentare sunt atât
cel mai rău caz de comportament al fel() acum este mai bine (în termeni informatici, acum
rulează în timp O(N log N), spre deosebire de timpul de rulare în cel mai rău caz Theta(N**2) al lui quicksort
comportament), și asta fel() este acum stabil (adică elementele cu chei identice
vor rămâne ordonate așa cum erau înainte de sortare). Vezi pragma „sortare” pentru
informaţii.

Povestea mai detaliată: să presupunem că doriți să vă serviți o felie mică de Pi.

@cifre = ( 3,1,4,1,5,9 );

Un sort numeric al cifrelor va produce (1,1,3,4,5,9), așa cum era de așteptat. Care 1 vine
primul este greu de știut, deoarece unul 1 seamănă destul de mult cu oricare altul. Poți să privești
asta ca fiind total banal sau oarecum profund. Cu toate acestea, dacă doriți doar să sortați
cifre par înaintea celor impare, atunci ce va fi

sortați { ($a % 2) <=> ($b % 2) } @cifre;

Randament? Singura cifră pară, 4, va fi prima. Dar ce zici de numerele impare, care
toate se compară la fel? Cu algoritmul de sortare rapidă utilizat pentru implementarea Perl 5.6 și
mai devreme, ordinea legăturilor este lăsată la socoteală. Deci, pe măsură ce adăugați din ce în ce mai mult
cifre ale lui Pi, ordinea în care apar cifrele par și impare sortate se va schimba.
și, pentru felii suficient de mari de Pi, algoritmul de sortare rapidă din Perl 5.8 nu va
returnează aceleași rezultate chiar dacă sunt reinvocate cu aceeași intrare. Justificarea pentru
aceasta depinde de cel mai rău caz al comportamentului Quicksort. Dacă fugi

sort { $a <=> $b } ( 1 .. $N , 1 .. $N );

(ceva pe care l-ați putea aproxima dacă doriți să îmbinați două matrice sortate folosind sortarea),
dublarea $N nu dublează doar timpul de sortare rapidă, ci cvadrupluri aceasta. Quicksort are un
în cel mai rău caz timp de rulare care poate crește ca N**2, așa-numitul pătratic comportament și se poate
se întâmplă pe modele care pot apărea în timpul utilizării normale. Nu vei observa asta pentru mici
matrice, dar tu voi observați-l cu matrice mai mari și este posibil să nu trăiți suficient
pentru ca sortarea să se completeze pe matrice de un milion de elemente. Deci, sortarea rapidă 5.8
amestecă matrice mari înainte de a le sorta, ca o apărare statistică împotriva pătratică
comportament. Dar asta înseamnă că dacă sortați aceeași matrice mare de două ori, legăturile pot fi rupte
în diverse feluri.

Din cauza impredictibilității ordinii de departajare și a celui mai rău caz pătratic
comportament, Quicksort a fost aproape înlocuit complet cu un mergesort stabil. Stabil
înseamnă că legăturile sunt rupte pentru a păstra ordinea inițială a apariției în intrare
matrice. Asa de

sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);

va randament (4,3,1,1,5,9), garantat. Numerele pare și impare apar în rezultat
în aceeași ordine în care au apărut în intrare. Mergesort are cel mai rău caz O(N log N)
comportament, cea mai bună valoare posibilă. Și, în mod ironic, acest mergesort are
mai ales în cazul în care sortarea rapidă devine pătratică: sortarea mergesort (1..$N, 1..$N) în
La timp. Dar Quicksort a fost salvat în ultimul moment pentru că este mai rapid decât
mergesort pe anumite intrări și platforme. De exemplu, dacă într-adevăr nu face pasă
despre ordinea cifrelor pare și impare, sortarea rapidă va rula în timp O(N); este foarte
bun la sortarea multor repetiții ale unui număr mic de elemente distincte. The
strategia de sortare rapidă de împărțire și cucerire funcționează bine pe platforme cu dimensiuni relativ mici,
foarte rapid, cache-uri. În cele din urmă, problema se reduce la una care se potrivește în
cache, din care moment beneficiază de viteza crescută a memoriei.

Quicksort a fost salvat prin implementarea unei pragma de sortare pentru a controla aspecte ale sortării.
stabil subpragma forțează un comportament stabil, indiferent de algoritm. The _sortare rapida
si _mergesort subpragmele sunt modalități grele de a selecta elementele de bază
implementare. Principalul „_” este un memento că aceste subpragme ar putea să nu supraviețuiască
dincolo de 5.8. Există mecanisme mai adecvate pentru selectarea implementării, dar
nu ar fi ajuns la timp pentru a salva Quicksort.

· Hashurile folosesc acum algoritmul cheii de hashing „One-at-a-Time” Bob Jenkins (
http://burtleburtle.net/bob/hash/doobs.html ). Acest algoritm este destul de rapid
producând în același timp o răspândire mult mai bună a valorilor decât vechiul algoritm de hashing
(inițial de Chris Torek, ulterior modificat de Ilya Zakharevich). Ieșire valori hash
din algoritmul pe un hash al tuturor cheilor ASCII imprimabile cu 3 caractere se apropie mult de
trecând testele DIEHARD de generare a numerelor aleatoare. Potrivit perlbench, aceasta
modificarea nu a afectat viteza generală a Perl.

· unshift() ar trebui să fie acum vizibil mai rapid.

Instalare si Configuraţie Îmbunătățiri


General Îmbunătățiri
· INSTALL explică acum cum puteți configura Perl să folosească numere întregi pe 64 de biți chiar și pe
platforme non-64 de biți.

· Schimbarea politicii Policy.sh: dacă reutilizați un fișier Policy.sh (consultați INSTALARE) și utilizați
Configurați -Dprefix=/foo/bar și în vechea Politică $prefix eq $siteprefix și $prefix
eq $vendorprefix, toate vor fi acum modificate la noul prefix, /foo/bar.
(Anterior doar $prefixul a fost schimbat.) Dacă nu vă place acest nou comportament, specificați
prefix, siteprefix și vendorprefix în mod explicit.

· O nouă locație opțională pentru bibliotecile Perl, otherlibdirs, este disponibilă. Poate fi
folosit, de exemplu, pentru suplimentele furnizorului fără a deranja directoarele proprii ale bibliotecii Perl.

· În multe platforme, „cc” furnizat de furnizor este prea redus pentru a construi Perl
(în principiu, „cc” nu face ANSI C). Dacă acesta pare să fie cazul și „cc” nu
par a fi compilatorul GNU C „gcc”, se face o încercare automată de a găsi și utiliza
„gcc” în schimb.

· gcc trebuie să urmărească îndeaproape ediția sistemului de operare pentru a evita problemele de construire. Dacă
Configurarea constată că gcc a fost creat pentru o versiune de sistem de operare diferită decât este
funcționează, acum dă un avertisment clar vizibil că pot apărea probleme înainte.

· Deoarece Perl 5.8 nu este compatibil binar cu versiunile anterioare ale Perl, Configurare nr
mai sugerează includerea modulelor 5.005 în @INC.

· Configurarea „-S” poate rula acum non-interactiv. [561]

· Suportul de configurare pentru modelele de memorie în stil pdp11 a fost eliminat din cauza învechirii.
[561]

· configure.gnu funcționează acum cu opțiuni cu spații albe în ele.

· Installperl scoate acum totul la STDERR.

· Deoarece PerlIO este acum implicit pe majoritatea platformelor, „-perlio” nu este atașat la
$Config{archname} (cunoscut și ca $^O). În schimb, dacă alegi în mod explicit
pentru a nu folosi perlio (opțiunea de configurare a liniei de comandă -Uuseperlio), veți obține „-stdio”
anexat.

· O altă modificare legată de numele arhitecturii este aceea că „-64all” (-Duse64bitall, sau
„maximum 64 de biți”) este atașat numai dacă pointerii dvs. au o lățime de 64 de biți. (Ca să fiu exact,
use64bitall este ignorată.)

· În instalațiile AFS, se poate configura rădăcina AFS să fie în altă parte decât
implicit /afs utilizând parametrul Configurare „-Dafsroot=/some/where/else”.

· APPLLIB_EXP, o definiție mai puțin cunoscută a timpului de configurare, a fost documentată. Aceasta
poate fi folosit pentru a adăuga directoare specifice site-ului la calea de căutare implicită a Perl (@INC);
consultați INSTALARE pentru informații.

· Versiunea Berkeley DB folosită atunci când Perl (și, probabil, extensia DB_File)
a fost construit este acum disponibil ca @Config{qw(db_version_major db_version_minor
db_version_patch)} din Perl și ca „DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
DB_VERSION_PATCH_CFG" din C.

· Construirea Berkeley DB3 pentru modurile de compatibilitate pentru DB, NDBM și ODBM a fost
documentat în INSTALL.

· Dacă aveți acces CPAN (fie rețea, fie o copie locală, cum ar fi un CD-ROM), puteți
în timpul, specificați module suplimentare pentru Configurare pentru a construi și instala cu Perl folosind
-Dextras=... optiune. Consultați INSTALARE pentru mai multe detalii.

· Pe lângă config.over, este disponibil un nou fișier de înlocuire, config.arch. Acest fișier
ar trebui să fie folosit de scriitorii de fișiere de indicii pentru modificări la nivel de arhitectură (spre deosebire de
la config.over care este pentru modificări la nivelul întregului site).

· Dacă sistemul dumneavoastră de fișiere acceptă legături simbolice, puteți construi Perl în afara sursei
director de

mkdir perl/build/directory
cd perl/build/director
sh /path/to/perl/source/Configure -Dmksymlinks...

Acest lucru va crea în perl/build/directory un arbore de legături simbolice care indică fișierele din
/cale/la/perl/sursă. Fișierele originale sunt lăsate neafectate. După ce Configurare are
terminat, poți doar să spui

face toate testele

iar Perl va fi construit și testat, totul în perl/build/directory. [561]

· Pentru dezvoltatorii Perl, au fost câteva noi ținte pentru profilare și depanare
adăugat; vezi perlhack.

· Utilizarea gprof instrument de profilare Perl a fost documentat în perlhack. Acolo
este un make target numit "perl.gprof" pentru generarea unui Perl gprofiled
executabil.

· Dacă aveți GCC 3, există o țintă de marcare numită „perl.gcov” pentru crearea unui
executabil gcoved Perl pentru analiza acoperirii. Vezi perlhack.

· Dacă sunteți pe platformele IRIX sau Tru64, noi opțiuni de profilare/depanare au
fost adăugată; vezi perlhack pentru mai multe informații despre pixie și Third Degree.

· S-au adăugat la INSTALL orientări despre cum să construiți instalații minime Perl.

· Extensia Thread nu este acum construită deloc sub ithreads ("Configurare
-Duseithreads") pentru că oricum nu ar funcționa (extensia Thread necesită a fi
Configurat cu „-Duse5005threads”).

notițe acea il 5.005 fire sunt neacceptat si depreciat: if tu avea cod scris
pentru il vechi fire tu migra it la il nou firele model.

· Macrocomanda Gconvert ($Config{d_Gconvert}) folosită de perl pentru stringerea virgulă mobilă
numerele este acum mai pretențios cu privire la utilizarea regulilor sprintf %.*g pentru conversie. niste
platformele care foloseau gcvt acum pot recurge la sprintf mai lent.

· Metoda învechită de a face o aromă specială (de ex., depanare) de perl prin rostirea

face LIBPERL=libperld.a

a fost indepartat. Folosiți -DDEBUGGING în schimb.

Nou Or Îmbunătățit Platforme
Pentru lista de platforme cunoscute că acceptă Perl, consultați „Platforme acceptate” în perlport.

· Încărcarea dinamică AIX ar trebui să fie acum mai bine suportată.

· AIX ar trebui acum să funcționeze mai bine cu gcc, fire și 64 de biți. De asemenea, dublele lungi
suportul în AIX ar trebui să fie mai bun acum. Vezi perlaix.

· AtheOS ( http://www.atheos.cx/ ) este o platformă nouă.

· BeOS a fost revendicat.

· Platforma DG/UX acceptă acum fire de execuție în stil 5.005. Vezi perldgux.

· Platforma DYNIX/ptx (cunoscută și sub numele de dynixptx) este suportată la sau aproape de osvers 4.5.2.

· Platformele EBCDIC (z/OS (cunoscut și ca OS/390), POSIX-BC și VM/ESA) au fost
recăpătat. Multe teste de suită de teste eșuează în continuare și coexistența Unicode și EBCDIC
nu este destul de rezolvat, dar situația este mult mai bună decât cu Perl 5.6. Vedea
perlos390, perlbs2000 (pentru POSIX-BC) și perlvmesa pentru mai multe informații. (Notă:
suportul pentru VM/ESA a fost eliminat în Perl v5.18.0. Informațiile relevante erau în
README.vmesa)

· Construirea perl cu -Duseithreads sau -Duse5005threads funcționează acum sub HP-UX 10.20
(anterior a funcționat doar sub 10.30 sau mai târziu). Veți avea nevoie de o bibliotecă de fire
pachet instalat. Consultați README.hpux. [561]

· Mac OS Classic este acum acceptat în pachetul sursă principal (MacPerl are of
Desigur, a fost disponibil încă din Perl 5.004, dar acum bazele codului sursă ale standardului Perl
și MacPerl au fost sincronizate) [561]

· Mac OS X (sau Darwin) ar trebui să poată acum construi Perl chiar și pe sistemele de fișiere HFS+. (Cel
insensibilitatea la majuscule și minuscule folosită pentru a încurca procesul de construire Perl.)

· NCR MP-RAS este acum acceptat. [561]

· Toate patch-urile specifice NetBSD (cu excepția celor specifice instalării) au fost
fuzionat înapoi la distribuția principală.

· NetWare de la Novell este acum acceptat. Vezi perlnetware.

· NonStop-UX este acum acceptat. [561]

· NEC SUPER-UX este acum acceptat.

· Toate patch-urile specifice OpenBSD (cu excepția celor specifice instalării) au fost
fuzionat înapoi la distribuția principală.

· Perl a fost testat cu pachetul GNU pth userlevel thread (
http://www.gnu.org/software/pth/pth.html ). Toate testele de fire ale Perl funcționează acum, dar
nu fără a adăuga câteva Randament()s la teste, deci în timp ce pth (și alt nivel de utilizator
implementări fir) pot fi considerate că „lucrează” cu ithread-uri Perl, păstrați
luați în considerare posibila non-preemptabilitate a implementării firului subiacent.

· Stratus VOS este acum suportat folosind metoda nativă de construire Perl (Configurare). Aceasta este
metoda recomandată pentru a construi Perl pe VOS. Metodele mai vechi, care construiesc miniperl,
sunt încă disponibile. Vezi perlvos. [561+]

· Platforma mainframe Amdahl UTS Unix este acum acceptată. [561]

· WinCE este acum acceptat. Vezi perlce.

· z/OS (cunoscut anterior ca OS/390, cunoscut anterior ca MVS OE) are acum suport pentru dinamica
Se încarcă. Aceasta nu este selectată implicit, totuși, trebuie să specificați -Dusedl în
argumentele lui Configurare. [561]

Selectate Bug Corecții


Numeroase scurgeri de memorie și accesări neinițializate la memorie au fost vânate. Cel mai
important, sub-urile anonime scurgeau destul de mult. [561]

· Pragma de utilizare automată nu a funcționat pentru Multi::Part::Function::Names.

· apelant() ar putea provoca depozite de miez în anumite situații. Crapul a fost uneori afectat de
această problemă. În special, apelant() acum returnează un nume de subrutină „(necunoscut)”
pentru subrutinele care au fost eliminate din tabelul de simboluri.

· chop(@list) în contextul listei a returnat caracterele tăiate în ordine inversă. Acest
a fost inversat pentru a fi în ordinea corectă. [561]

· Configurarea nu mai include bibliotecile DBM (dbm, gdbm, db, ndbm) la construirea
Binar Perl. Singura excepție de la aceasta este SunOS 4.x, care are nevoie de ele. [561]

· Comportamentul constantelor șirurilor non-zecimale, dar numerice, cum ar fi „0x23” a fost platform-
dependent: pe unele platforme care a fost văzut ca 35, în unele ca 0, în unele ca un plutitor
numărul punctului (nu întreba). Acest lucru a fost cauzat de utilizarea sistemului de operare de către Perl
biblioteci într-o situație în care rezultatul conversiei șir în număr este
nedefinit: acum Perl gestionează în mod constant șiruri ca zero în contexte numerice.

· Mai multe remedieri ale depanatorului: codul de ieșire reflectă acum codul de ieșire din script, condiția „0” acum
tratată corect, comanda „d” verifică acum numărul de linie, $. nu mai ajunge
corupt și toată ieșirea depanatorului merge acum corect la socket dacă RemotePort este
a stabilit. [561]

· Depanatorul (perl5db.pl) a fost modificat pentru a prezenta comenzi mai consistente
interfață, prin (CommandSet=580). perl5db.t a fost, de asemenea, adăugat pentru a testa modificările și as
un substituent pentru teste ulterioare.

Vezi perldebug.

· Depanatorul are o nouă opțiune „dumpDepth” pentru a controla adâncimea maximă la care imbricat
structurile sunt aruncate. Comanda „x” a fost extinsă astfel încât „x N EXPR” să fie eliminată
valoarea exp la o adâncime de cel mult N niveluri.

· Depanatorul poate afișa acum variabile lexicale dacă aveți modulul CPAN PadWalker
instalat.

· Ordinea DETROY-urilor a fost făcută mai previzibilă.

· Perl 5.6.0 ar putea emite avertismente false despre redefinirea dl_error() cand
construind static extensii în perl. Acest lucru a fost corectat. [561]

· dprofpp -R nu a funcționat.

· *foo{FORMAT} funcționează acum.

· Infinitul este acum recunoscut ca număr.

· UNIVERSAL::isa nu mai memorează în cache metodele incorect. (Acest lucru a rupt extensia Tk
cu 5.6.0.) [561]

· Lexicale I: lexicale din afara unui „” eval nu au fost rezolvate corect în cadrul unei subrutine
definiție în interiorul evalului „” dacă nu au fost deja menționate la nivelul superior al
codul de evaluare.

· Lexicale II: lexicale scurse în domeniul fișierului în subrutine care au fost declarate înainte
lexicale.

· Avertismentele lexicale se propagă acum corect între domenii și în „eval „...””.

· „Utilizați avertismente qw(FATAL all)” nu a funcționat așa cum a fost prevăzut. Acest lucru a fost corectat. [561]

· warnings::enabled() acum raportează corect starea lui $^W dacă apelantul nu folosește
avertismente lexicale. [561]

· Renumerotarea liniilor cu eval și „#line” funcționează acum. [561]

· S-au remediat numeroase scurgeri de memorie, în special în evalul „”.

· Variabilele legate localizate nu mai scurg memorie

utilizați Tie::Hash;
tie my %tied_hash => 'Tie::StdHash';

...

# Folosit pentru a pierde memorie de fiecare dată când local() a fost apelat;
# într-o buclă, aceasta a adăugat.
local($tied_hash{Foo}) = 1;

· Elementele hash localizate (și %ENV) sunt corect nelocalizate pentru a nu exista, dacă acestea sunt
nu au făcut-o înainte de a fi localizate.

utilizați Tie::Hash;
tie my %tied_hash => 'Tie::StdHash';

...

# Nimic nu a setat elementul FOO până acum

{ local $tied_hash{FOO} = „Bar” }

# Aceasta se tipări înainte, dar nu acum.
tipăriți „există!\n” dacă există $tied_hash{FOO};

Ca efect secundar al acestei remedieri, interfețele hash sunt legate trebuie sa definiți EXISTĂ și DELETE
metode.

· mkdir() acum ignoră barele oblice din urmă în numele directorului, așa cum este impus de POSIX.

· Unele versiuni de glibc au un rupt modfl(). Acest lucru afectează construirea cu
„-Duselongdouble”. Această versiune de Perl detectează această defecțiune și are o soluție
pentru aceasta. Se știe că versiunea glibc 2.2.2 a remediat modfl() gândac.

· Modulul numerelor nesemnate funcționează acum (4063328477 % 65535 folosit pentru a returna 27406,
în loc de 27047). [561]

· Unele avertismente „nu un număr” introduse în 5.6.0 au fost eliminate pentru a fi mai compatibile cu
5.005. Infinitul este acum recunoscut ca număr. [561]

· Conversiile numerice nu au recunoscut corect modificările valorii șirului de caractere în anumite cazuri
circumstanțe. [561]

· Atributele (cum ar fi :shared) nu au funcționat al nostru().

· al nostru() variabilele nu vor provoca avertismente false „Variabila nu va rămâne partajată”. [561]

· Variabilele „noastre” cu același nume declarate în două blocuri frați au rezultat în fals
avertismente despre „redeclararea” variabilelor. Problema a fost corectată.
[561]

· pachetul „Z” acum termină corect șirul cu „\0”.

· Remediați rutinele de parole pe care le-au cauzat în unele platforme umbră de parole (de exemplu, HP-UX).
getpwent() pentru a returna orice altă intrare.

· Variabila de mediu PERL5OPT (pentru transmiterea argumentelor liniei de comandă către Perl) nu a făcut-o
lucrează pentru mai mult de un singur grup de opțiuni. [561]

· PERL5OPT cu spații încorporate nu a funcționat.

· printf() nu mai resetează localitatea numerică la „C”.

· „qw(a\\b)” acum se analizează corect ca „a\\b”: adică ca trei caractere, nu patru.
[561]

· pos() nu a returnat valoarea corectă în s///ge în versiunile anterioare. Asta este acum
manipulate corect. [561]

· Imprimarea quad-urilor (întregi pe 64 de biți) cu printf/sprintf funcționează acum fără q L ll
prefixe (presupunând că vă aflați pe o platformă cu capacitate cvadruplă).

· Expresiile regulate pe referințe și scalari supraîncărcați funcționează acum. [561+]

· Magia din partea dreaptă (GMAGIC) ar putea fi în multe cazuri, cum ar fi concatenarea șirurilor
invocat de prea multe ori.

· scalar() acum forțează contextul scalar chiar și atunci când este utilizat în context nul.

· Suportul SOCKS este acum mult mai robust.

· fel() argumentele sunt acum compilate în contextul wantarray corect (au fost
folosind accidental contextul fel() însuși). Blocul de comparație este acum rulat
în context scalar, iar argumentele care trebuie sortate sunt întotdeauna furnizate în contextul listei.
[561]

· S-a schimbat clasa de caractere POSIX „[[:space:]]” pentru a include (foarte rar folosit)
caracter de filă verticală. S-a adăugat o nouă clasă de caractere POSIX „[[:blank:]]” care
reprezintă spațiul alb orizontal (în prezent, spațiul și fila).

· Comportamentul contaminant al sprintf() a fost raționalizat. Nu pătează
rezultat al formatelor în virgulă mobilă, făcând comportamentul consistent cu cel al
interpolarea șirurilor. [561]

· Unele cazuri de propagare inconsecventă a impurităților (cum ar fi valorile hash) au fost
fix.

· Motorul RE găsit în Perl 5.6.0 a pesimizat accidental anumite tipuri de simple
potriviri de model. Acestea sunt acum tratate mai bine. [561]

· Ieșire de depanare a expresiei regulate (fie prin „utilizați re „depanare”” sau prin „-Dr”) acum
arata mai bine. [561]

· Potrivirile pe mai multe linii precum „"a\nxb\n" =~ /(?!\A)x/m" au fost greșite. Bug-ul a fost
fix. [561]

· Utilizarea $& poate declanșa o descărcare de bază în anumite situații. Acest lucru este acum evitat. [561]

· Subpotrivirile capturate ale expresiei regulate ($1, $2, ...) sunt acum mai consistente
dezactivat dacă meciul eșuează, în loc să lase date false în ele. [561]

· Citeste linia() pe fișierele deschise în modul „slurp” ar putea returna un „” suplimentar (linie goală) la
sfârşitul în anumite situaţii. Acest lucru a fost corectat. [561]

· Autovivificarea referințelor simbolice ale variabilelor speciale descrise în perlvar (as
în „${$num}”) a fost dezactivat accidental. Acest lucru funcționează din nou acum. [561]

· Sys::Syslog a ignorat constanta „LOG_AUTH”.

· $AUTLOAD, fel(), Lacăt(), și generarea subproceselor în mai multe fire
simultan sunt acum sigure pentru fire.

· Metoda SPLICE a Tie::Array a fost întreruptă.

· Permite un șir de numai citire în partea stângă a unui tr// care nu se modifică/.

· Dacă „STDERR” este egal, avertismentele cauzate de „avertizează” și „die” îi trec acum corect.

· Mai multe remedieri Unicode.

· BOM (marcajele de ordine ale octetilor) la începutul fișierelor Perl (scripturi, module)
ar trebui să fie acum omis în mod transparent. Fișierele Perl codificate UTF-16 și UCS-2
acum ar trebui citit corect.

· Tabelele de caractere au fost actualizate la Unicode 3.2.0.

· Compararea cu datele utf8 nu actualizează în mod magic datele non-utf8 în utf8.
(Aceasta a fost o problemă, de exemplu, dacă amestecați date de la I/O și Unicode
date: este posibil ca rezultatul dvs. să fi fost codificat magic ca UTF-8.)

· Generarea de puncte de cod Unicode ilegale, cum ar fi U+FFFE sau UTF-16
surogate, acum generează și un avertisment opțional.

· „IsAlnum”, „IsAlpha” și „IsWord” se potrivesc acum cu titlul.

· Concatenare cu „.” operator sau prin interpolare variabilă, „eq”,
„substr”, „reverse”, „quotemeta”, operatorul „x”, înlocuirea cu „s///”,
UTF-8 cu ghilimele simple, ar trebui să funcționeze acum.

· Operatorul „tr///” funcționează acum. Rețineți că funcționalitatea „tr///CU” are
a fost eliminat (dar vezi pachetul('U0', ...)).

· „eval „v200”” acum funcționează.

· Perl 5.6.0 a analizat m/\x{ab}/ incorect, ducând la avertismente false. Acest
a fost corectat. [561]

· Lipseau zero intrări din clasele Unicode, cum ar fi „IsDigit”.

· Numerele mari nesemnate (cele de peste 2**31) își pot pierde uneori caracterul nesemnat,
provocând rezultate false în operații aritmetice. [561]

· Analizorul Perl a fost testat folosind atât intrare aleatorie, cât și intrare în lanț Markov
iar cele câteva accidente și blocaje găsite au fost remediate.

Platformă Specific Modificări si Corecții
· BSDI 4.*

Perl funcționează acum pe BSD/OS-uri post-4.0.

· Toate BSD-urile

Setarea $0 funcționează acum (pe cât posibil; vezi perlvar pentru detalii).

· Cygwin

Numeroase actualizări; sincronizat în prezent cu Cygwin 1.3.10.

· Anterior, DYNIX/ptx a avut probleme în sonda Configurare pentru I/O neblocante.

· EPOC

EPOC este acum mai bine suportat. Vezi README.epoc. [561]

· FreeBSD 3.*

Perl funcționează acum pe FreeBSD post-3.0.

· HP-UX

README.hpux actualizat; „Configurare -Duse64bitall” funcționează acum; acum folosește HP-UX malloc
în loc de Perl malloc.

· IRIX

Numeroase îmbunătățiri de semnalizare și indicii de compilare; amestecarea accidentală a 32 de biți și
Bibliotecile pe 64 de biți (o încercare condamnată) au fost mult mai dificile.

· Linux

· Dublele lungi ar trebui să funcționeze acum (vezi INSTALARE). [561]

· Linux a avut anterior probleme legate de sockaddrlen la utilizare Accept(),
recvfrom() (în Perl: recv ()), getpeername() și getsockname().

· Mac OS Classic

Compilarea distribuției standard Perl în Mac OS Classic ar trebui să funcționeze acum dacă dvs
au mediul de dezvoltare Metrowerks și biții lipsă din setul de instrumente specifice Mac.
Contactați lista de corespondență macperl pentru detalii.

· MPE/iX

Actualizare MPE/iX după Perl 5.6.0. Vezi README.mpeix. [561]

· NetBSD/threads: încercați să instalați GNU pth (ar trebui să fie în colecția de pachete sau
http://www.gnu.org/software/pth/), și Configurați cu -Duseithreads.

· NetBSD/sparc

Perl funcționează acum pe NetBSD/sparc.

· OS/2

Acum funcționează cu usethreads (vezi INSTALARE). [561]

· Solaris

64 de biți folosind compilatorul Sun Workshop funcționează acum.

· Stratus VOS

Metoda nativă de construire necesită cel puțin VOS Release 14.5.0 și GNU C++/GNU Tools
2.0.1 sau o versiune ulterioară. Funcția pachet Perl mapează acum valorile depășite la +infinit și
a depăşit valorile la -infinit.

· Tru64 (alias Digital UNIX, alias DEC OSF/1)

Scrisoarea versiunii sistemului de operare este acum înregistrată în $Config{osvers}. Permite compilarea
cu gcc (interzis în mod explicit anterior). Compilarea cu gcc încă nu este recomandată
deoarece rezultă un cod bug, chiar și cu gcc 2.95.2.

· Unicos

S-au rezolvat diverse probleme de aliniere care duc la depozitele de miez fie în timpul construcției, fie
mai tarziu; nu mai moare din cauza erorilor de matematică în timpul execuției; acum folosind patru întregi întregi (64
biți), anterior folosea doar numere întregi de 46 de biți pentru viteză.

· VMS

Consultați „Extensia socket dinamică în VMS” și „Valoare implicită în virgulă mobilă în format IEEE activată
OpenVMS Alpha" pentru modificări importante care nu sunt enumerate altfel aici.

chdir() acum funcționează mai bine în ciuda unei erori CRT; acum funcționează cu MULTIPLICITATE (vezi INSTALARE);
acum funcționează cu malloc-ul lui Perl.

Contaminarea elementelor %ENV prin „chei” sau „valori” a fost neimplementată anterior. Aceasta
acum funcționează conform documentelor.

Emulația „waitpid” a fost îmbunătățită. Cel mai rău bug (acum remediat) a fost că un pid
de -1 ar provoca o căutare cu wildcard a tuturor proceselor din sistem.

Semnalele în stil POSIX sunt acum emulate mult mai bine pe versiunile VMS anterioare 7.0.

Funcția „sistem” și operatorul de backticks au funcționalitate îmbunătățită și mai bună
eroare de manipulare. [561]

Testele de acces la fișiere folosesc acum privilegiile de proces curente, mai degrabă decât cele implicite ale utilizatorului
privilegii, care uneori ar putea duce la o nepotrivire între accesul raportat și
acces real. Această îmbunătățire este disponibilă numai pe VMS v6.0 și ulterioare.

Există o nouă implementare „kill” bazată pe „sys$sigprc” care permite VMS mai vechi
sistemele (înainte de 7.0) să folosească „kill” pentru a trimite semnale, în loc să forțeze pur și simplu ieșirea. Acest
implementarea permite, de asemenea, sistemelor ulterioare să apeleze „kill” din cadrul unui handler de semnal.

Traducerile iterative ale numelor logice sunt acum limitate la 10 iterații, pentru a imita
SHOW LOGIC și alte facilități OpenVMS.

· Ferestre

· Gestionarea semnalului funcționează acum mai bine decât înainte. Acum este implementat folosind
o buclă de mesaje Windows și, prin urmare, este mai puțin predispus la blocări aleatorii.

· furculiţă() emularea este acum mai robustă, dar continuă să aibă câteva
bug-uri ezoterice și avertismente. Consultați perlfork pentru detalii. [561+]

· O (pseudo)furcătură eșuată returnează acum undef și setează errno la EAGAIN. [561]

· Următoarele module funcționează acum pe Windows:

ExtUtils::Embed [561]
IO::Pipe
IO::Sondaj
Net::Ping

· IO::File::new_tmpfile() nu se mai limitează la 32767 invocări per proces.

· Mai bine chdir() valoarea returnată pentru un director inexistent.

· Acum este acceptată compilarea perl folosind instrumentele Platform SDK pe 64 de biți.

· Win32::SetChildShowWindow() încorporat poate fi folosit pentru a controla vizibilitatea
de ferestre create de procese copil. Consultați Win32 pentru detalii.

· Așteptările non-blocante pentru procesele copil (sau pseudo-procese) sunt acceptate prin intermediul
„waitpid($pid, &POSIX::WNOHANG)”.

· Comportamentul sistem() cu argumente multiple a fost raţionalizat. Fiecare
argumentul necotat va fi citat automat pentru a proteja spațiile albe și orice
spațiile albe existente în argumente vor fi păstrate. Acest lucru îmbunătățește
portabilitatea sistemului(@args) prin evitarea necesității unui shell „cmd” Windows
citate specifice în programele perl.

Rețineți că acest lucru înseamnă că unele scripturi care s-ar fi bazat pe bug-uri anterioare
comportamentul poate să nu mai funcționeze corect. De exemplu, "system("nmake /nologo",
@args)" va încerca acum să ruleze fișierul "nmake /nologo" și va eșua când
un astfel de fișier nu este găsit. Pe de altă parte, perl va executa acum un astfel de cod
ca „system(„c:/Program Files/MyApp/foo.exe”, @args)” corect.

· Fișierele de antet perl nu mai suprimă avertismentele comune de la Microsoft
Compilator Visual C++. Aceasta înseamnă că acum pot apărea avertismente suplimentare când
compilarea codului XS.

· Borland C++ v5.5 este acum un compilator acceptat care poate construi Perl. In orice caz,
binarele generate continuă să fie incompatibile cu cele generate de
alte compilatoare acceptate (GCC și Visual C++). [561]

· Dupingul mânerelor de soclu cu deschis(F, ">&MYSOCK") funcționează acum sub Windows 9x.
[561]

· Intrările curente din directorul %ENV sunt acum propagate corect către copil
proceselor. [561]

· Noile intrări %ENV se propagă acum la subprocese. [561]

· Win32::GetCwd() returnează corect C:\ în loc de C: când se află la rădăcina unității.
Alte erori în chdir() si Cwd::cwd() au fost de asemenea reparate. [561]

· Makefile-urile acum implicit la funcțiile activate în ActiveState ActivePerl (a
distribuție binară populară Win32). [561]

· Fișierele HTML vor fi acum instalate în c:\perl\html în loc de
c:\perl\lib\pod\html

· Cheile REG_EXPAND_SZ sunt acum permise în setările de registru utilizate de perl. [561]

· Poate acum trimite() din toate firele, nu doar din primul. [561]

· ExtUtils::MakeMaker folosește acum $ENV{LIB} pentru a căuta biblioteci. [561]

· Mai puține stive rezervate pe fir, astfel încât mai multe fire să poată rula simultan.
(Încă 16 milioane pe fir.) [561]

· „File::Spec->tmpdir()” preferă acum C:/temp / tmp (funcționează mai bine când perl
rulează ca serviciu).

· O mai bună gestionare a căilor UNC sub ithreads. [561]

· aștepta(), waitpid(), iar backtick-urile returnează acum starea de ieșire corectă la
Windows 9x. [561]

· Scurgerea unui mâner de priză Accept() a fost fixat. [561]

Nou or schimbată Diagnostics


Vă rugăm să consultați perldiag pentru mai multe detalii.

· Interval ambiguu în operatorul de transliterare (cum ar fi az-9) dă acum un avertisment.

· chdir("") și chdir(undef) oferă acum un avertisment de depreciere deoarece provoacă a
posibil chdir neintenționat în directorul principal. Spune chdir() dacă vrei să spui cu adevărat
acea.

· Au fost adăugate două noi opțiuni de depanare: dacă ați compilat Perl-ul cu
depanare, puteți utiliza opțiunile -DT [561] și -DR pentru a urmări tokenizarea și pentru a adăuga
referința contează la afișarea variabilelor, respectiv.

· Categoria de avertismente lexicale „depreciate” nu mai este o subcategorie a „sintaxei”
categorie. Acum este o categorie de nivel superior în sine.

· Neîmpodobite dump() va da acum un avertisment sugerând utilizarea explicit CORE::dump() if
asta înseamnă cu adevărat.

· Avertismentul „Evadare nerecunoscută” a fost extins pentru a include „\8”, „\9” și „\_”.
Nu este nevoie să scăpați de niciunul dintre caracterele „\w”.

· Toate mesajele de eroare de compilare a expresiilor regulate sunt acum, sperăm, mai ușor
înțelegeți ambele pentru că mesajul de eroare vine acum înainte de regex eșuat și
deoarece punctul de eșec este acum marcat clar de un marker „<-- AICI”.

· Diverse funcții I/O (și socket), cum ar fi binmode(), închide(), și așa mai departe acum mai mult
avertizează în mod constant dacă sunt folosite în mod ilogic fie pe un încă nedeschis, fie pe un
mâner de fișiere deja închis (sau soclu).

· Folosind lstat () pe un filehandle dă acum un avertisment. (Este un lucru lipsit de sens.)

· Opțiunile „-M” și „-m” avertizează acum dacă nu ați furnizat numele modulului.

· Dacă în „utilizare” specificați o versiune minimă necesară, module care se potrivesc cu numele și dar
nedefinirea unei versiuni $ va cauza o eroare fatală.

· Utilizarea offset negativ pentru vec() în context lvalue este acum o infracțiune avertizată.

· Numărul impar de argumente pentru supraîncărcare::constant generează acum un avertisment.

· Numărul impar de elemente din hash anonim provoacă acum un avertisment.

· Diferitele avertismente „deschis doar pentru”, „pe închis”, „niciodată deschise” renunță la „principal::”
prefix pentru filehandlele din pachetul „principal”, de exemplu „STDIN” în loc de
"principal::STDIN".

· Prototipurile subrutinelor sunt acum verificate cu mai multă atenție, este posibil să primiți avertismente, de exemplu
dacă ați folosit caractere non-prototip.

· Dacă se încearcă folosirea unei referințe (nebinecuvântate) ca index de matrice, se avertizează
dat.

· „împinge @a;” și „unshift @a;” (fără valori de apăsat sau anulat) dați acum un avertisment.
Aceasta poate fi o problemă pentru codul generat și evaluat.

· Dacă încercați să „împachetați” în perlfunc un număr mai mic de 0 sau mai mare de 255 folosind „C”
format veți primi un avertisment opțional. La fel pentru formatul „c” și un număr
mai puțin de -128 sau mai mult de 127.

· Formatul pachet „P” necesită acum o dimensiune explicită.

· despachetează „w” acum avertizează asupra numerelor întregi comprimate neterminate.

· Au fost adăugate avertismente legate de utilizarea PerlIO.

· Anumiți modificatori regex, cum ar fi „(?o)” au sens numai dacă sunt aplicați întregului regex.
Veți primi un avertisment opțional dacă încercați să faceți altfel.

· Lungimea variabilă lookbehind nu a fost încă implementată, încercarea de a o utiliza va spune
acea.

· Utilizarea matricelor sau hashurilor ca referințe (de exemplu, „%foo->{bar}” a fost depreciată pentru un
in timp ce. Acum veți primi un avertisment opțional.

· Au fost adăugate avertismente legate de utilizarea noii funcții hash restricționate.

· Self-legăturile de matrice și hashuri nu sunt acceptate și erori fatale se vor produce chiar și la
o încercare de a face acest lucru.

· Utilizarea „sortare” în context scalar emite acum un avertisment opțional. Asta nu a fost
orice util, deoarece sortarea nu a fost efectuată.

· Utilizarea modificatorului /g în Despică() este lipsit de sens și va provoca un avertisment.

· Folosind lipitură() trecut de sfârșitul unei matrice acum provoacă un avertisment.

· Codările Unicode incorecte (UTF-8 și UTF-16) provoacă o mulțime de avertismente, la fel ca și încercarea
pentru a utiliza surogate UTF-16 (care nu sunt implementate).

· Încercarea de a utiliza caractere Unicode pe un flux I/O fără a marca fluxul
codificare (folosind deschis() or binmode()) va provoca avertismente „caracter larg”.

· Utilizarea v-strings în utilizare/require provoacă un avertisment de portabilitate (înapoi).

· Au fost avertismente legate de utilizarea firelor de execuție interpretor și a datelor lor partajate
adăugat.

schimbată Internals


· PerlIO este acum implicit.

· perlapi.pod (un însoțitor al perlguts) încearcă acum să documenteze API-ul intern.

· Acum puteți construi un perl cu adevărat minim numit microperl. Construirea microperl nu
necesită chiar rularea Configurare; „make -f Makefile.micro” ar trebui să fie suficient. Ai grijă:
microperl face multe presupuneri, dintre care unele pot fi prea îndrăznețe; rezultați
executabilul se poate prăbuși sau se poate comporta greșit în moduri minunate. Pentru hackeri atenți
numai.

· Adăugat rsignal(), whichsig(), do_join(), op_clear, op_null, ptr_table_clear(),
ptr_table_free(), sv_setref_uv(), și mai multe interfețe UTF-8 către API-ul publicitar.
Pentru lista completă a API-urilor disponibile, consultați perlapi.

· A făcut posibilă propagarea excepțiilor personalizate prin cârâit()ING.

· Acum xsubs pot avea atribute la fel ca subs. (Ei bine, cel puțin cel încorporat
atribute.)

· dTHR și djSP au fost depășite; primul a fost eliminat (pentru că este un no-op) și cel
din urmă înlocuit cu dSP.

· PERL_OBJECT a fost complet eliminat.

· Constantele MAGIC (de exemplu, „P”) au fost macrofitate (ex. „PERL_MAGIC_TIED”) pentru o mai bună
lizibilitatea și menținerea codului sursă.

· Compilatorul regex menține acum o structură care identifică nodurile din compilat
bytecode cu caracteristicile sintactice corespunzătoare ale expresiei regex originale.
Informațiile sunt atașate noului membru „offsets” al „struct regexp”. Vedea
perldebguts pentru informații mai complete.

· Codul C a fost făcut mult mai curat „gcc -Wall”. Încă câteva mesaje de avertizare
rămân pe unele platforme, așa că, dacă compilați cu gcc, este posibil să vedeți unele avertismente
despre practici dubioase. Se lucrează la avertismente.

· perly.c, sv.c și sv.h au fost acum comentate pe larg.

· Documentația despre cum să utilizați depozitul sursă Perl a fost adăugată la
Portare/repozitiv.pod.

· Acum există mai multe ținte de profilare.

Securitate Vulnerabilitate Operații Închise [561]


(Această modificare a fost deja făcută în 5.7.0, dar trebuie repetată aici.) (5.7.0 a apărut înainte
5.6.1: ramura de dezvoltare 5.7 lansată mai devreme decât ramura de întreținere 5.6)

O potențială vulnerabilitate de securitate în componenta opțională suidperl a Perl a fost
identificat în august 2000. suidperl nu este nici construit, nici instalat implicit. Începând cu
Noiembrie 2001 singura platformă vulnerabilă cunoscută este Linux, cel mai probabil toate Linux
distribuţiile. CERT și diverși vânzători și distribuitori au fost alertați cu privire la
vulnerabilitate. Vedea http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt pentru
mai multe informatii.

Problema a fost cauzată de faptul că Perl a încercat să raporteze o tentativă de exploatare de securitate suspectată folosind
un program extern, /bin/mail. Pe platformele Linux, programul /bin/mail avea un
caracteristică nedocumentată care, atunci când este combinată cu suidperl, a dat acces la un shell rădăcină,
rezultând un compromis serios în loc de a raporta încercarea de exploatare. Dacă nu
aveți /bin/mail sau dacă aveți „scripturi setuid sigure” sau dacă suidperl nu este instalat,
sunt in siguranta.

Caracteristica de raportare a tentativelor de exploatare a fost complet eliminată din Perl 5.8.0 (și
versiunea de întreținere 5.6.1 și a fost eliminată și din toate versiunile Perl 5.7), deci
acea vulnerabilitate anume nu mai există. Cu toate acestea, mai multă securitate
vulnerabilitățile sunt, din păcate, întotdeauna posibile. Funcționalitatea suidperl este cea mai mare
probabil va fi eliminat în Perl 5.10. În orice caz, suidperl ar trebui să fie folosit numai de
experți în securitate care știu exact ce fac și de ce folosesc suidperl
în loc de altă soluție, cum ar fi sudo (vezi http://www.courtesan.com/sudo/ ).

Nou Teste


Au fost adăugate mai multe teste noi, în special pentru lib si ext subsecţiuni. Sunt
acum aproximativ 69 000 de teste individuale (împrăștiate pe aproximativ 700 de scripturi de testare), în regresie
suite (5.6.1 are aproximativ 11 700 de teste, în 258 de scripturi de testare) Numerele exacte depind de
platforma și configurația Perl utilizate. Multe dintre noile teste sunt, desigur, introduse de
noile module, dar în general, Perl este acum testat mai amănunțit.

Din cauza numărului mare de teste, rularea suitei de regresie va dura considerabil
timp mai lung decât înainte: așteptați-vă ca suita să dureze de până la 4-5 ori mai mult decât
în perl 5.6. Pe o mașină foarte rapidă poți spera să termini suita în aproximativ 6-8
minute (ora ceasului de perete).

Testele sunt acum raportate într-o ordine diferită decât în ​​Perls anterioare. (Asta se intampla
deoarece scripturile de testare de sub t/lib au fost mutate pentru a fi mai aproape de
biblioteca/extensia pe care o testează.)

Cunoscut Probleme


compilator Suită Is Încă Foarte Experimental
Suita de compilare se îmbunătățește încet, dar continuă să fie extrem de experimentală.
Utilizarea în medii de producție este descurajată.

Localizarea legat Arrays si Hash-uri Is Spart
local %tied_array;

nu funcționează așa cum ar fi de așteptat: vechea valoare este restaurată incorect. Asta o să fie
schimbat într-o versiune viitoare, dar nu știm încă care va fi noua semantică exactă.
În orice caz, modificarea va rupe codul existent care se bazează pe curentul (prost definit)
semantică, așa că evitați să faceți acest lucru în general.

Clădire Extensii Putea Eșua pentru că Of Fișiere mari
Se știe că unele extensii precum mod_perl au probleme cu „fișierele mari”, o schimbare adusă
de Perl 5.6.0 în care offset-urile fișierelor sunt implicite la 64 de biți, acolo unde este acceptată. Modulele pot
nu reușesc să compileze deloc, sau se pot compila și funcționa incorect. În prezent, nu există
soluție bună pentru problemă, dar Configure oferă acum fișierul non-large adecvat
ccflags, ldflags, libswanted și libs în hash-ul %Config (de exemplu,
$Config{ccflags_nolargefiles}), astfel încât extensiile care au probleme pot încerca
configurându-se fără fișiere mari. Desigur, aceasta nu este o curățare
soluție, iar soluția poate să nu funcționeze deloc. Un potențial eșec este dacă unul
poate (sau, dacă se poate, dacă este o idee bună să) legați împreună la toate binarele cu
idei diferite despre compensarea fișierelor; toate acestea sunt dependente de platformă.

Modificatoare $_ În interiorul pentru(..)
pentru (1..5) { $_++ }

functioneaza fara plangere. Nu ar trebui. (Ar trebui să puteți modifica numai lvalue
elemente din interiorul buclelor.) Puteți vedea comportamentul corect înlocuind 1..5 cu
1, 2, 3, 4, 5.

mod_perl 1.26 Nu Construi cu Filetat Perl
Utilizați mod_perl 1.27 sau o versiune ulterioară.

lib/ftmp-security teste avertiza 'sistem eventual nesigur'
Nu intrați în panică. Citiți în schimb secțiunea „Face test” din INSTALL.

libwww-perl (LWP) eșuează baza/data #51
Utilizați libwww-perl 5.65 sau o versiune ulterioară.

PDL în lipsa unele teste
Utilizați PDL 2.3.4 sau o versiune ulterioară.

Perl_get_sv
Este posibil să primiți erori precum „Simbol nedefinit „Perl_get_sv”” sau „Simbolul nu se poate rezolva
„Perl_get_sv””, sau simbolul poate fi „Perl_sv_2pv”. Aceasta înseamnă probabil că sunteți
încercarea de a utiliza o bibliotecă Perl partajată mai veche (sau extensii legate de acestea) cu Perl
5.8.0 executabil. Perl avea o astfel de subrutină, dar nu mai este cazul.
Verificați calea bibliotecii partajate și orice biblioteci Perl partajate din acele directoare.

Uneori, această problemă poate indica și o instalare parțială a Perl 5.8.0, consultați „Mac OS X
dyld simboluri nedefinite" pentru un exemplu și cum să le gestionați.

Autolegare Probleme
Auto-legarea de matrice și hash-uri este ruptă în moduri destul de profunde și greu de remediat. Ca oprire-
măsura decalajului pentru a evita ca oamenii să fie frustrați de rezultatele misterioase
cel mai adesea), este interzis deocamdată (veți obține o eroare fatală chiar și la o încercare).

O modificare a autolegarii globurilor a făcut ca acestea să fie referite recursiv (vezi: „Două-
Phased Garbage Collection" în perlobj). Acum veți avea nevoie de o dezlegare explicită pentru a distruge un
auto-legat glob. Acest comportament poate fi remediat la o dată ulterioară.

Auto-legarea scalarilor și a obiectelor IO funcționează.

ext/threads/t/libc
Dacă acest test eșuează, indică faptul că libc (biblioteca C) nu este sigură pentru fire. Acest
anumite teste de stres testează ora locala() sunați pentru a afla dacă este threadsafe.
Consultați perlthrtut pentru mai multe informații.

Eșec of Fir (stil 5.005) teste
notițe acea a sustine pentru 5.005 stil filetat is depreciat, experimental si practic
nesuportat. In 5.10, it is de aşteptat la be îndepărtat. Tu migra ta cod la
firele.

Se știe că următoarele teste eșuează din cauza unor probleme fundamentale în threadingul 5.005
implementare. Acestea nu sunt erori noi - Perl 5.005_0x are aceleași erori, dar nu
au aceste teste.

../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14
../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7
../lib/English.t 2 512 54 2 3.70% 2-3
../lib/FileCache.t 5 1 20.00% 5
../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3
../lib/Filter/Simple/t/filter_only. 9 3 33.33% 1-2 5
../lib/Math/BigInt/t/bare_mbf.t 1627 4 0.25% 8 11 1626-1627
../lib/Math/BigInt/t/bigfltpm.t 1629 4 0.25% 10 13 1628-
1629
../lib/Math/BigInt/t/sub_mbf.t 1633 4 0.24% 8 11 1632-1633
../lib/Math/BigInt/t/with_sub.t 1628 4 0.25% 9 12 1627-1628
../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65
../lib/autouse.t 10 1 10.00% 4
op/flip.t 15 1 6.67% 15

Este puțin probabil ca aceste defecțiuni să fie remediate, deoarece sunt luate în considerare firele în stil 5.005
rupt fundamental. (Practic, ceea ce se întâmplă este că firele concurente se pot deteriora
stare globală partajată, un exemplu bun fiind starea motorului de expresii regulate.)

Sincronizare probleme
Următoarele teste pot eșua intermitent din cauza problemelor de sincronizare, de exemplu dacă
sistemul este foarte încărcat.

t/op/alarm.t
ext/Time/HiRes/HiRes.t
lib/Benchmark.t
lib/Memoize/t/expmod_t.t
lib/Memoize/t/speed.t

În caz de eșec, încercați să le rulați manual, de exemplu

./perl -Ilib ext/Time/HiRes/HiRes.t

Legat/Magic Array/Hash Elemente de Do Nu Autovivificare
Pentru tablourile normale, „$foo = \$bar[1]” va atribui „undef” lui $bar[1] (presupunând că
nu a existat înainte), dar pentru matricele legate/magice și hashuri există o astfel de autovivificare
nu se întâmplă deoarece în prezent nu există nicio modalitate de a surprinde crearea de referință. La fel
problema afectează tăierea peste indici/chei inexistenți ai unui array/hash legat/magic.

Unicode in pachet/clasa si subrutină nume face nu muncă
Se poate avea Unicode în numele identificatorilor, dar nu în numele pachetelor/claselor sau subrutinei.
În timp ce unele funcționalități limitate în acest sens există încă din Perl 5.8.0, asta este mai mult
accidental decât proiectat; utilizarea Unicode în aceste scopuri nu este acceptată.

Un motiv al acestei neterminări este neportabilitatea (în prezent) inerentă: deoarece ambele
Este posibil ca numele pachetelor și subrutinele să fie mapate la nume de fișiere și de director
Capacitatea Unicode a sistemului de fișiere devine importantă - și, din păcate, nu există
răspunsuri portabile.

Platformă Specific Probleme


AIX
· Dacă utilizați comanda nativă AIX make, în loc de doar „make” problema „make all”. În
se știe că unele setări, în mod fals, încearcă să ruleze „make install”.
Alternativ, poate doriți să utilizați GNU make.

· În AIX 4.2, extensiile Perl care utilizează funcții C++ care folosesc statică pot avea probleme
prin faptul că statica nu este inițializată. În versiunile mai noi AIX, acest lucru a fost
rezolvat prin conectarea Perl cu biblioteca libC_r, dar, din păcate, în AIX 4.2,
biblioteca are un bug obscur în care diferitele funcții sunt legate de timp (cum ar fi timp()
si gettimeofday()) returnează valori rupte și, prin urmare, în AIX 4.2 Perl nu este legat
împotriva libC_r.

· vac 5.0.0.0 Poate produce cod Buggy pentru Perl

Compilatorul AIX C vac versiunea 5.0.0.0 poate produce cod cu erori, rezultând câteva
teste aleatorii eșuează atunci când sunt executate ca parte a „testului de a face”, dar când testele eșuate sunt
alergați cu mâna, reușesc. Vă sugerăm să faceți upgrade la cel puțin versiunea vac 5.0.1.0, că
se știe că compilează Perl corect. „lslpp -L|grep vac.C” vă va spune vac
versiune. Vezi README.aix.

· Dacă construiți Perl cu fire de execuție, este posibil să primiți avertisment de compilare de la pp_sys.c:

„pp_sys.c”, linia 4651.39: 1506-280 (W) Atribuirea argumentelor funcției între tipurile „unsigned char*” și „const void*” nu este permisă.

Acest lucru este inofensiv; este cauzată de getnetbyaddr() si getnetbyaddr_r() având în
tipuri ușor diferite pentru primul lor argument.

Alfa sisteme cu vechi gccs eşua câteva teste
Dacă vedeți op/pack, op/pat, op/regexp sau teste ext/Storable eșuând într-un Linux/alpha sau
*BSD/Alpha, probabil că este timpul să vă actualizați gcc. gccs înainte de 2.95.3 sunt cu siguranță
nu este suficient de bun, iar gcc 3.1 poate fi chiar mai bun. (RedHat Linux/alpha cu gcc 3.1
nu au raportat probleme, la fel ca și Linux 2.4.18 cu gcc 2.95.4.) (În Tru64, este de preferat
pentru a utiliza compilatorul C inclus.)

AmigaOS
Perl 5.8.0 nu este construit în AmigaOS. S-a rupt la un moment dat în timpul lucrului ithreads și
nu am putut găsi experți Amiga care să rezolve problemele. Perl 5.6.1 încă funcționează pentru
AmigaOS (la fel ca și versiunea de dezvoltare 5.7.2).

BeOS
Următoarele teste eșuează pe 5.8.0 Perl în BeOS Personal 5.03:

t/op/lfs..................................EȘUT la testul 17
t/op/magic..........................EȘCUT la testul 24
ext/Fcntl/t/syslfs..................EȘUT la testul 17
ext/File/Glob/t/basic...............EȘUT la testul 3
ext/POSIX/t/sigaction...............EȘUT la testul 13
ext/POSIX/t/waitpid.................EȘUT la testul 1

(Notă: mai multe informații au fost disponibile în README.beos până când suportul pentru BeOS a fost eliminat în
Perl v5.18.0)

Cygwin „incapabil la remapa"
De exemplu, când construiți extensia Tk pentru Cygwin, este posibil să primiți un mesaj de eroare care spune
„nu se poate remapa”. Aceasta este o problemă cunoscută cu Cygwin și o soluție este detaliată în
aici: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html

Cygwin ndbm teste eşua on FAT
Se poate construi, dar nu se poate instala (sau testa construirea) fișierului NDBM_File pe sistemele de fișiere FAT.
Instalarea (sau construirea) pe NTFS funcționează bine. Dacă cineva încearcă să testeze o instalare FAT (sau
build) sunt de așteptat următoarele erori:

../ext/NDBM_File/ndbm.t 13 3328 71 59 83.10% 1-2 4 16-71
../ext/ODBM_File/odbm.t 255 65280 ?? ?? % ??
../lib/AnyDBM_File.t 2 512 12 2 16.67% 1 4
../lib/Memoize/t/errors.t 0 139 11 5 45.45% 7-11
../lib/Memoize/t/tie_ndbm.t 13 3328 4 4 100.00% 1-4
run/fresh_perl.t 97 1 1.03% 91

NDBM_File eșuează și ODBM_File doar coredumps.

Dacă intenționați să rulați numai pe FAT (sau dacă utilizați AnyDBM_File pe FAT), rulați Configure cu
Opțiunile -Ui_ndbm și -Ui_dbm pentru a preveni construirea NDBM_File și ODBM_File.

DJGPP eşecurile
t/op/stat...........................EȘUT la testul 29
lib/File/Find/t/find.................FAILED la testul 1
lib/File/Find/t/taint................FAILED la testul 1
lib/h2xs.................................EȘUT la testul 15
lib/Pod/t/eol........................EȘCUT la testul 1
lib/Test/Harness/t/strap-analyze.....EȘCUT la testul 8
lib/Test/Harness/t/test-harness......EȘCUT la testul 23
lib/Test/Simple/t/exit...............EȘUT la testul 1

Eșecurile de mai sus sunt cunoscute ca din 5.8.0 cu versiuni native cu nume lungi de fișiere, dar există
mai sunt câteva dacă rulează sub dosemu din cauza limitărilor (și poate erorilor) ale dosemu:

t/comp/cpp...........................EȘUT la testul 3
t/op/inccode...........................(crash)

și câteva teste lib/ExtUtils și câteva sute de erori Encode/t/Aliases.t care funcționează
bine cu nume lungi de fișiere. Deci, s-ar putea să preferați versiuni native și nume lungi de fișiere.

FreeBSD construit cu firele gunoaie de core lectură mare directoare
Acesta este o eroare cunoscută în FreeBSD 4.5 readdir_r(), a fost remediat în FreeBSD 4.6 (vezi
perlfreebsd (README.freebsd)).

FreeBSD în lipsa localizare Test 117 Pentru ISO 8859-15 Locale
Localurile ISO 8859-15 pot eșua testul local 117 în FreeBSD. Acest lucru este cauzat de
caracterele \xFF (y cu diereză) și \xBE (Y cu diereză) nu se comportă corect atunci când
fiind potriviți fără distincție între majuscule și minuscule. Se pare că această problemă a fost rezolvată cel mai recent
Lansări FreeBSD. ( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 )

IRIX eșuează ext/List/Util/t/shuffle.t or Digest::MD5
IRIX cu compilatorul MIPSpro 7.3.1.2m sau 7.3.1.3m poate eșua testul List::Util
ext/List/Util/t/shuffle.t prin descărcarea nucleului. Aceasta pare a fi o eroare a compilatorului, deoarece if
compilat cu gcc nu apare nicio descărcare de bază și nu au fost observate erori la testul menționat
orice altă platformă.

În mod similar, construirea extensiei Digest::MD5 a eșuat cu „*** Terminare
cod 139 (bu21)".

Remediul este să scadă nivelul de optimizare (Configurare -Doptimize=-O2).

HP-UX lib/posix Subtest 9 Nu reușește Cand LP64-Configurat
Dacă perl este configurat cu -Duse64bitall, rezultatul cu succes al subtestului 10 al
lib/posix poate ajunge înainte de rezultatul reușit al subtestului 9, ceea ce derutează
ham de testare atât de mult încât crede că subtestul 9 a eșuat.

Linux cu glibc 2.2.5 eșuează t/op/int subtest #6 cu -Duse64bitint
Acesta este un bug cunoscut în glibc 2.2.5 cu numere întregi lungi. (
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612)

Linux cu Sfio Nu reușește op/diverse Test 48
Nicio remediere cunoscută.

Mac OS X
Vă rugăm să nu uitați să setați variabila de mediu LC_ALL la „C” (setenv LC_ALL C) înainte
rulați „make test” pentru a evita o mulțime de avertismente despre localizările deteriorate ale Mac OS X.

Se știe că următoarele teste eșuează în Mac OS X 10.1.5 din cauza erorilor (vechi)
implementări ale Berkeley DB incluse în Mac OS X:

Eșuat Test Stat Wstat Eșec total Eșuat Lista cu eșecuri
-------------------------------------------------- -----------------------
../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65

Dacă construiți pe o partiție UFS, probabil că veți vedea subtestul #9 t/op/stat.t
eșuează. Acest lucru este cauzat de faptul că UFS-ul lui Darwin nu acceptă timpul de schimbare a inodului.

De asemenea, subtestul #10 ext/POSIX/t/posix.t eșuează, dar este omis pentru moment deoarece
eșecul este vina Apple, nu a lui Perl (semnalele blocate se pierd).

Dacă configurați cu ithreads, ext/threads/t/libc.t va eșua. Din nou, acesta nu este al lui Perl
eroare-- libc-ul Mac OS X nu este threadsafe (în acest test special, sistemul ora locala()
apelul este considerat a fi sigur pentru fire.)

Mac OS X dyld nedefinit simboluri
Dacă după instalarea Perl 5.8.0 primiți avertismente despre simboluri lipsă, de exemplu

dyld: perl Simboluri nedefinite
_perl_sv_2pv
_perl_get_sv

probabil că aveți o veche instalare pre-Perl-5.8.0 (sau părți ale uneia) în /Library/Perl
(simbolurile nedefinite existau în Perls pre-5.8.0). Se pare că din anumite motive
„make install” nu suprascrie întotdeauna complet fișierele din /Library/Perl. Poti
mutați vechea bibliotecă partajată Perl din drum astfel:

cd /Library/Perl/darwin/CORE
mv libperl.dylib libperlold.dylib

și apoi lansați din nou „make install”. Rețineți că cele de mai sus sunt, desigur, extrem de perturbatoare
pentru orice folosește /usr/local/bin/perl. Dacă asta nu ajută, poate fi necesar să încerci
eliminând toate fișierele .bundle de sub /Library/Perl și din nou „make install”-ing.

OS / 2 Test eşecurile
Se știe că următoarele teste eșuează pe OS/2 (pentru claritate sunt afișate doar eșecurile,
nu mesajele de eroare complete):

../lib/ExtUtils/t/Mkbootstrap.t 1 256 18 1 5.56% 8
../lib/ExtUtils/t/Packlist.t 1 256 34 1 2.94% 17
../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14
lib/os2_process.t 2 512 227 2 0.88% 174 209
lib/os2_process_kid.t 227 2 0.88% 174 209
lib/rx_cmprt.t 255 65280 18 3 16.67% 16-18

op/sprintf teste 91, 129, si 130
Se știe că testele op/sprintf 91, 129 și 130 eșuează pe unele platforme. Exemple
includeți orice platformă care utilizează sfio și NonStop-UX de la Compaq/Tandem.

Se știe că testul 91 eșuează pe QNX6 (nto), deoarece „sprintf '%e',0” produce incorect
0.000000e+0 în loc de 0.000000e+00.

Pentru testele 129 și 130, platformele defectuoase nu respectă standardul ANSI C: linii
19ff la pagina 134 din ANSI X3.159 1989, mai exact. (Ei produc altceva decât „1”
și „-1” când se formatează 0.6 și -0.6 folosind formatul printf „%.0f”; cel mai adesea, ei
produce „0” și „-0”.)

SCO
Se știe că testele de perechi de prize sunt nefericite în SCO 3.2v5.0.4:

ext/Socket/socketpair.t...............FAILED teste 15-45

Solaris 2.5
În cazul în care încă utilizați Solaris 2.5 (alias SunOS 5.5), este posibil să aveți defecțiuni (
test core dumping) în lib/locale.t. Remediul sugerat este să vă actualizați Solaris-ul.

Solaris x86 Nu reușește Teste cu -Duse64bitint
Se știe că următoarele teste eșuează în Solaris x86 cu Perl configurat să utilizeze 64 de biți
numere întregi:

ext/Data/Dumper/t/dumper.............Eșuat la testul 268
ext/Devel/Peek/Peek..................EȘUT la testul 7

SUPER-UX (NEC S X)
Se știe că următoarele teste eșuează pe SUPER-UX:

op/64bitint...........................TESTELE EȘCATE 29-30, 32-33, 35-36
op/arith..............................TESTELE EȘCATE 128-130
op/pack...............................TESTELE ESCUTATE 25-5625
op/pow................................
op/taint..............................# msgsnd a eșuat
../ext/IO/lib/IO/t/io_poll............Teste 3-4 ESCUT
../ext/IPC/SysV/ipcsysv...............TESTELE ESCUTATE 2, 5-6
../ext/IPC/SysV/t/msg..................TESTE RUCITE 2, 4-6
../ext/Socket/socketpair..............Testele EŞECTATE 12
../lib/IPC/SysV.......................TESTE RUCITE 2, 5-6
../lib/warnings.......................FAILED teste 115-116, 118-119

Eșecul op/pack ("Nu se pot comprima numerele negative la op/pack.t linia 126") este gravă
dar încă nerezolvată. Ea indică unele probleme cu gestionarea semnăturii C
compilator, la fel și eșecurile 64bitint, arith și pow. Cele mai multe dintre ele se referă la probleme
cu SysV IPC.

Termen::ReadKey nu de lucru on Win32
Utilizați Termen::ReadKey 2.20 sau o versiune ulterioară.

UNICOS/mk
· În timpul Configurare, testul

Ghiciți ce simboluri definesc compilatorul și preprocesorul dvs. C...

va eșua probabil cu mesaje de eroare precum

CC-20 cc: ERROR File = try.c, Line = 3
Identificatorul „prost” este nedefinit.

comutator prost yylook 79 comutator rău yylook 79 comutator rău yylook 79 comutator rău yylook 79#ifdef A29K
^

CC-65 cc: ERROR File = try.c, Line = 3
Este de așteptat un punct și virgulă în acest moment.

Acest lucru este cauzat de o eroare în utilitarul awk al UNICOS/mk. Puteți ignora eroarea,
dar provoacă o ușoară problemă: nu puteți beneficia pe deplin de utilitarul h2ph
(vezi h2ph) care poate fi folosit pentru a converti antetele C în biblioteci Perl, în principal
capabil să acceseze din Perl constantele definite folosind preprocesorul C, cpp. Din cauza
eroarea de mai sus, părți din anteturile convertite vor fi invizibile. Din fericire, acestea
zilele nevoia de h2ph este rară.

· Dacă construiți Perl cu fire de execuție (ithreads), fișierul getgrent(), getgrnam() și
getgrgid() funcțiile nu pot returna lista membrilor grupului din cauza unei erori în fișierul
suport multithread al UNICOS/mk. Ceea ce înseamnă aceasta este că în contextul listei
funcțiile vor returna doar trei valori, nu patru.

UTS
Există câteva eșecuri de testare cunoscute. (Notă: informațiile relevante au fost disponibile în
README.uts până când suportul pentru UTS a fost eliminat în Perl v5.18.0)

VOS (Stratus)
Când Perl este construit folosind procesul de construire nativ pe VOS Release 14.5.0 și GNU C++/GNU
Instrumente 2.0.1, toate încercările de testare fie trec, fie duc la eșecuri TODO (ignorate).

extensia VMS
Nu ar trebui să fie raportate eșecuri de testare cu o configurație implicită, deși există a
numărul de teste marcate TODO care indică zonele care necesită depanare și/sau portare ulterioară
muncă.

Win32
În casetele cu mai multe CPU, există unele probleme cu tamponarea I/O: pot apărea unele ieșiri
de două ori.

XML::Parser nu de lucru
Utilizați XML::Parser 2.31 sau o versiune ulterioară.

z/OS (OS/390)
z/OS are destul de multe eșecuri de testare, dar situația este de fapt mult mai bună decât era
în 5.6.0; doar că au fost adăugate atât de multe module și teste noi.

Eșuat Test Stat Wstat Eșec total Eșuat Lista cu eșecuri
-------------------------------------------------- -------------------------
../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327
+331 333 337 339
../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
110-111 150 161
../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
op/pat.t 922 7 0.76% 665 776 785 832-
834 845
op/sprintf.t 224 3 1.34% 98 100 136
op/tr.t 97 5 5.15% 63 71-74
uni/fold.t 780 6 0.77% 61 169 196 661
710-711

Eșecurile din dumper.t și downgrade.t sunt probleme la teste, cele din io_unix și
sprintf sunt probleme în USS (socket-uri UDP și formate printf). Pat, tr și fold
Eșecurile sunt probleme Perl autentice cauzate de EBCDIC (și în cazurile pat și pliere,
combinând asta cu Unicode). Constanta și Embed sunt probabil probleme în teste
(din moment ce testează capacitatea lui Perl de a construi extensii și asta pare să funcționeze
destul de bine.)

Unicode Asistență on EBCDIC Încă Plină de coșuri
Deși funcționează în cea mai mare parte, suportul Unicode are încă puncte problematice pe platformele EBCDIC. unu
astfel de puncte cunoscute sunt constructele de expresii regulate „\p{}” și „\P{}” pentru punctele de cod
mai puțin de 256: „pP” testează punctele de cod Unicode, neștiind despre EBCDIC.

Văzut In Perl 5.7 dar Plecat Acum
„Time::Piece” (cunoscut anterior ca „Time::Object”) a fost eliminat deoarece s-a simțit că
nu avea suficientă valoare pentru a fi un modul de bază. Este încă un modul util, totuși,
și este disponibil de la CPAN.

Perl 5.8, din păcate, nu se mai construiește pe AmigaOS; asta s-a rupt accidental la unii
punct. Deoarece nu sunt atât de mulți dezvoltatori Amiga disponibili, nu am putut obține acest lucru
fixat și testat la timp pentru 5.8.0. Perl 5.6.1 încă funcționează pentru AmigaOS (la fel și 5.7.2
versiunea de dezvoltare).

„PerlIO::Scalar” și „PerlIO::Via” (cu majuscule) au fost redenumite „PerlIO::scalar” și
„PerlIO::via” (toate litere mici) chiar înainte de 5.8.0. Rațiunea principală a fost să avem tot nucleul
Straturile PerlIO să aibă toate numele minuscule. „Pluginurile” sunt denumite ca de obicei, de exemplu
„PerlIO::via::QuotedPrint”.

„Treads::shared::queue” și „threads::shared::semafor” au fost redenumite ca
„Thread::Queue” și „Thread::Semaphore” chiar înainte de 5.8.0. Rațiunea principală a fost să aibă
module de fire pentru a respecta denumirea normală, „Thread::” („threads” și „threads::shared”
ei înșiși sunt mai pragmatici, afectează timpul de compilare, deci rămân litere mici).

Raportarea Bugs


Dacă găsiți ceea ce credeți că este o eroare, puteți verifica articolele postate recent pe
grupul de știri comp.lang.perl.misc și baza de date de erori Perl la http://bugs.perl.org/ . Acolo
pot fi, de asemenea, informații la http://www.perl.com/ , Pagina de pornire Perl.

Dacă credeți că aveți o eroare neraportată, vă rugăm să rulați perlbug program inclus cu
eliberarea ta. Asigurați-vă că vă reduceți bug-ul la un caz de testare mic, dar suficient. bug-ul tău
raportul, împreună cu rezultatul „perl -V”, vor fi trimise către [e-mail protejat] pentru a fi
analizate de echipa de portare Perl.

Utilizați perl58delta online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

  • 1
    Phaser
    Phaser
    Phaser este o deschidere rapidă, gratuită și distractivă
    cadru de joc HTML5 sursă care oferă
    Redare WebGL și Canvas
    browsere web desktop și mobile. Jocuri
    poate fi co...
    Descărcați Phaser
  • 2
    Motor VASSAL
    Motor VASSAL
    VASSAL este un motor de joc pentru creare
    versiuni electronice ale plăcii tradiționale
    și jocuri de cărți. Oferă suport pentru
    redarea și interacțiunea pieselor de joc,
    și ...
    Descărcați VASSAL Engine
  • 3
    OpenPDF - Furk of iText
    OpenPDF - Furk of iText
    OpenPDF este o bibliotecă Java pentru creare
    și editarea fișierelor PDF cu un LGPL și
    Licență open source MPL. OpenPDF este
    Succesorul LGPL/MPL open source al iText,
    o ...
    Descărcați OpenPDF - Furk of iText
  • 4
    SAGA GIS
    SAGA GIS
    SAGA - Sistem pentru automatizare
    Analize Geoștiințifice - este un Geografic
    Sistemul informatic (GIS) software cu
    capacități imense pentru geodate
    procesare și ana...
    Descărcați SAGA GIS
  • 5
    Caseta de instrumente pentru Java/JTOpen
    Caseta de instrumente pentru Java/JTOpen
    IBM Toolbox for Java / JTOpen este un
    biblioteca de clase Java care acceptă
    programare client/server și internet
    modele către un sistem care rulează OS/400,
    i5/OS, o...
    Descărcați Toolbox pentru Java/JTOpen
  • 6
    D3.js
    D3.js
    D3.js (sau D3 pentru documente bazate pe date)
    este o bibliotecă JavaScript care vă permite
    pentru a produce date dinamice, interactive
    vizualizări în browsere web. Cu D3
    tu...
    Descărcați D3.js
  • Mai mult »

Comenzi Linux

Ad