perl5220delta - Online în cloud

Aceasta este comanda perl5220delta 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


perl5220delta - ce este nou pentru perl v5.22.0

DESCRIERE


Acest document descrie diferențele dintre versiunea 5.20.0 și versiunea 5.22.0.

Dacă faceți upgrade de la o versiune anterioară, cum ar fi 5.18.0, citiți mai întâi perl5200delta,
care descrie diferențele dintre 5.18.0 și 5.20.0.

Nucleu Îmbunătățiri


Nou bitwise Operatorii
A fost adăugată o nouă facilitate experimentală care face cei patru operatori standard pe biți
("& | ^ ~") tratează operanzii lor în mod consecvent ca numere și introduce patru noi puncte
operatori ("&. |. ^. ~.") care tratează operanzii lor în mod consecvent ca șiruri. La fel
se aplică variantelor de atribuire ("&= |= ^= &.= |.= ^.=").

Pentru a utiliza acest lucru, activați caracteristica „bitwise” și dezactivați avertismentele „experimental::bitwise”
categorie. Consultați „Operatori șiruri pe biți” în perlop pentru detalii. [perl #123466]
.

Nou dublu diamant operator
„<<>>” este ca „<>”, dar folosește „deschis” cu trei argumente pentru a deschide fiecare fișier din @ARGV. Asta înseamnă
că fiecare element al @ARGV va fi tratat ca un nume de fișier real, iar „|foo” nu va fi
tratată ca o țeavă deschisă.

Nou „\b” limitele in regulat expresii
„qr/\b{gcb}/”

„gcb” înseamnă Grapheme Cluster Boundary. Este o proprietate Unicode care găsește
granița dintre secvențele de caractere care arată ca un singur caracter pentru un nativ
vorbitor al unei limbi. Perl are de multă vreme capacitatea de a se ocupa de acestea prin „\X”
secvență obișnuită de evadare. Acum, există o modalitate alternativă de a le gestiona. Vedeți „\b{},
\b, \B{}, \B" în perlrebackslash pentru detalii.

„qr/\b{wb}/”

„wb” înseamnă Word Boundary. Este o proprietate Unicode care găsește granița între
cuvinte. Acesta este similar cu simplul „\b” (fără bretele), dar este mai potrivit pentru
procesarea limbajului natural. Știe, de exemplu, că pot apărea apostrofe în
mijlocul cuvintelor. Consultați „\b{}, \b, \B{}, \B” în perlrebackslash pentru detalii.

„qr/\b{sb}/”

„sb” înseamnă Sentence Boundary. Este o proprietate Unicode pentru a ajuta la analiza naturală
propoziții de limbă. Consultați „\b{}, \b, \B{}, \B” în perlrebackslash pentru detalii.

Necapturare Regulat Expresie Pavilion
Expresiile regulate acceptă acum un semnalizator „/n” care dezactivează capturarea și completarea $1, $2,
etc în interiorul grupurilor:

„bună ziua” =~ /(bună|bună ziua)/n; # $1 nu este setat

Acest lucru este echivalent cu punerea „?:” la începutul fiecărui grup de captură.

Consultați „n” în perlre pentru mai multe informații.

"utilizare re 'strict'"
Acest lucru aplică reguli de sintaxă mai stricte modelelor de expresii regulate compilate în cadrul acestuia
domeniul de aplicare. Acest lucru, sperăm, vă va alerta asupra greșelilor de scriere și a altor comportamente neintenționate care
problemele de compatibilitate inversă ne împiedică să raportăm în expresie regulată normală
compilatii. Deoarece comportamentul acestuia este supus modificării în viitoarele versiuni Perl
pe măsură ce câștigăm experiență, utilizarea acestei pragma va ridica un avertisment de categorie
„experimental::re_strict”. Vezi „strict” în re.

Unicode 7.0 (cu corecţie) is acum sprijinite
Pentru detalii despre ceea ce este în această versiune, consultați
<http://www.unicode.org/versions/Unicode7.0.0/>. Versiunea Unicode 7.0 care vine
cu Perl include o corecție care se ocupă de modelarea glifelor în arabă (vezi
<http://www.unicode.org/errata/#current_errata>).

"utilizare local" poate să restrânge care localizare categorii sunt afectat
Acum este posibil să se treacă un parametru la „utilizare locală” pentru a specifica un subset de locale
categoriile să fie conștiente de localitate, cu cele rămase neafectate. Consultați „„Utilizați localitatea”
pragma" în perllocale pentru detalii.

Perl acum sprijină POSIX 2008 localizare valută adăugări
Pe platformele care sunt capabile să gestioneze POSIX.1-2008, hash-ul a revenit de
„POSIX::localeconv()” include câmpurile valutare internaționale adăugate de acea versiune a
standardul POSIX. Acestea sunt „int_n_cs_precedes”, „int_n_sep_by_space”,
„int_n_sign_posn”, „int_p_cs_precedes”, „int_p_sep_by_space” și „int_p_sign_posn”.

Mai bine euristice on mai în vârstă platforme pentru determinarea localizare UTF-8ness
Pe platformele care nu implementează nici standardul C99, nici standardul POSIX 2001,
determinarea dacă localitatea curentă este UTF-8 sau nu depinde de euristică. Acestea sunt
îmbunătățit în această versiune.

Alianta de referință
Variabilele și subrutinele pot fi acum aliasate prin alocarea unei referințe:

\$c = \$d;
\&x = \&y;

Aliasarea poate fi realizată și prin utilizarea unei bare oblice inverse înaintea unui iterator „foreach”.
variabil; acesta este poate cel mai util expresie oferită de această caracteristică:

foreach \%hash (@array_of_hash_refs) { ... }

Această funcție este experimentală și trebuie să fie activată prin „utilizați caracteristica „refaliasing””. Se va
avertizează, cu excepția cazului în care categoria de avertismente „experimental::refaliaing” este dezactivată.

Consultați „Atribuirea referințelor” în perlref

"prototip" cu Nu. argumente
„prototype()” fără argumente deduce acum $_. [perl #123514]
.

Nou ":const" subrutină atribut
Atributul „const” poate fi aplicat unei subrutine anonime. Determină noul sub
să fie executat imediat ori de câte ori este creat unul (de exemplu când expresia „sub” este
evaluat). Valoarea sa este capturată și utilizată pentru a crea o nouă subrutină constantă, adică
întors. Această caracteristică este experimentală. Consultați „Funcții constante” în perlsub.

"număr fișier" acum fabrică on director mânere
Când suportul relevant este disponibil în sistemul de operare, „fileno” încorporat acum
funcționează pe mânere de director, producând descriptorul de fișier de bază în același mod ca pentru
manere de fișiere. Pe sistemele de operare fără un astfel de suport, „fileno” pe un handle de director
continuă să returneze valoarea nedefinită, ca înainte, dar setează și $! pentru a indica faptul că
operațiunea nu este acceptată.

În prezent, acesta utilizează fie un membru „dd_fd” în structura „DIR” a sistemului de operare, fie un dirfd(3)
funcția specificată de POSIX.1-2008.

Listă formă of ţeavă deschide implementat pentru Win32
Forma de listă a conductei:

deschide-mi $fh, "-|", "program", @argumente;

este acum implementat pe Win32. Are aceleași limitări ca „LISTA de sistem” pe Win32, de atunci
API-ul Win32 nu acceptă argumentele programului ca listă.

Cesiune la listă repetiţie
„(...) x ...” poate fi acum utilizat într-o listă care este atribuită, atâta timp cât mâna stângă
latura este o valoare l validă. Acest lucru permite scrisul „(undef,undef,$foo) = that_function()”.
ca „((undef)x2, $foo) = that_function()”.

Infinit si NaN (nu-un-numar) manipulare îmbunătățit
Valorile în virgulă mobilă pot păstra valorile speciale infinit, infinit negativ și
NaN (nu-un număr). Acum recunoaștem și propagam mai puternic valoarea în
calculele, iar la ieșire le normalizați la șirurile „Inf”, „-Inf” și „NaN”.

Vedeți și îmbunătățirile POSIX.

plutitor punct analizare are fost îmbunătățit
Analiza și imprimarea valorilor în virgulă mobilă a fost îmbunătățită.

Ca o caracteristică complet nouă, literalele hexazecimale în virgulă mobilă (cum ar fi „0x1.23p-4”) sunt
sunt acum acceptate și pot fi scoase cu „printf „%a””. Consultați „Constructori de valori scalare”
în perldata pentru mai multe detalii.

Ambalare infinit or nu-un-numar în a caracter is acum fatal
Înainte, când încercam să împachetezi infinitul sau nu-un număr într-un caracter (semnat), Perl ar
avertizează și a presupus că ați încercat să împachetați 0xFF; dacă l-ai dat ca argument la „chr”, „U+FFFD”
a fost returnat.

Dar acum, toate astfel de acțiuni ("pack", "chr" și "print '%c'") au ca rezultat o eroare fatală.

Experimental C Înapoi API
Perl acceptă acum (prin intermediul unui API la nivel C) preluarea backtrace la nivel C (similar cu ceea ce
depanatoarele simbolice precum gdb fac).

Backtrace returnează următorul stivă a cadrelor de apel C, cu numele simbolurilor
(numele funcțiilor), numele obiectelor (cum ar fi „perl”) și, dacă se poate, și codul sursă
locații (file:line).

Platformele acceptate sunt Linux și OS X (unele *BSD ar putea funcționa cel puțin parțial, dar acestea
nu au fost încă testate).

Funcția trebuie să fie activată cu „Configurare -Dusecbacktrace”.

Consultați „C backtrace” din perlhacktips pentru mai multe informații.

Securitate


Perl is acum compilat cu „-fstack-protector-strong” if disponibil
De atunci, Perl a fost compilat cu opțiunea anti-stack-smashing „-fstack-protector”.
5.10.1. Acum Perl folosește varianta mai nouă numită „-fstack-protector-strong”, dacă este disponibilă.

Sigur modul ar putea permite exterior ofertele la be înlocuiește
Remediere critică: pachetele externe ar putea fi înlocuite. Safe a fost corecţionat la 2.38 la
abordează acest lucru.

Perl is acum mereu compilat cu „-D_FORTIFY_SOURCE=2” if disponibil
Opțiunea „cod hardening” numită „_FORTIFY_SOURCE”, disponibilă în gcc 4.*, este acum întotdeauna
folosit pentru compilarea Perl, dacă este disponibil.

Rețineți că acesta nu este neapărat un pas uriaș, deoarece în multe platforme pasul a avut deja
a fost luată acum câțiva ani: multe distribuții Linux (cum ar fi Fedora) au folosit acest lucru
opțiune pentru Perl, iar OS X a aplicat aceeași de mulți ani.

Incompatibil Modificări


Subrutină semnături mutat înainte atribute
Caracteristica experimentală a subsemnăturilor, așa cum a fost introdusă în 5.20, a analizat semnăturile după
atribute. În această versiune, în urma feedbackului de la utilizatorii funcției experimentale,
poziționarea a fost mutată astfel încât semnăturile să apară după numele subrutinei (dacă
oricare) și înainte de lista de atribute (dacă există).

„&” si „\&” prototipuri acceptă subs
Personajul prototip „&” acceptă acum numai sub-uri anonime („sub {...}”), lucruri
începând cu „\&”, sau un „undef” explicit. Anterior, a permis și în mod eronat
referințe la matrice, hash-uri și liste. [perl #4539]
. [perl #4539]
. [perl #123062]
.

În plus, prototipul „\&” permitea apeluri subrutine, în timp ce acum permite doar
subrutine: &foo este încă permisă ca argument, în timp ce „&foo()” și „foo()” nu mai
sunt. [perl #77860] .

"utilizare codificare" is acum lexical
Efectul pragma de codificare este acum limitat la domeniul lexical. Această pragma este depreciată,
dar, între timp, ar putea afecta negativ modulele care nu au legătură care sunt incluse în
același program; această schimbare fixează asta.

Listă felii revenind gol Listele
Secțiunile de listă returnează acum o listă goală numai dacă lista originală era goală (sau dacă există
fără indici). Anterior, o porțiune de listă returna o listă goală dacă toți indicii scădeau
în afara listei originale; acum returnează o listă de valori „undef” în acest caz. [perl
#114498] .

„\N{}” cu a secvenţă of multiplu spații is acum a fatal eroare
De exemplu, „\N{PRA MULTE SPAȚII}” sau „\N{SPAȚIU FINAL }”. Acest lucru a fost depreciat de atunci
v5.18.

"utilizare UNIVERSAL '...'" is acum a fatal eroare
Importarea funcțiilor din „UNIVERSAL” a fost retrasă începând cu v5.12 și acum este fatală
eroare. „utilizați UNIVERSAL” fără niciun argument este încă permis.

In ghilimele duble „\cX", X trebuie sa acum be a imprimabilă ASCII caracter
În versiunile anterioare, nerespectarea acestui lucru a generat un avertisment de depreciere.

Despicare il jetoane "(?" si "(*" in regulat expresii is acum a fatal compilare eroare.
Acestea au fost depreciate începând cu v5.18.

„qr/foo/x” acum ignorările toate Unicode model alb spaţiu
Modificatorul expresiei regulate „/x” permite modelului să conțină spațiu alb și
comentarii (ambele ignorate) pentru o lizibilitate îmbunătățită. Până acum, nu toate
au fost tratate caracterele de spațiu alb pe care Unicode le desemnează în acest scop. The
altele acum recunoscute sunt:

U+0085 RÂNDUL URMĂTOR
U+200E MARCĂ DE LA STÂNGA LA DREAPTA
U+200F MARCĂ DE LA DREAPTA LA STÂNGA
U+2028 SEPARATOR DE LINIE
U+2029 SEPARATOR PARAGRAF

Utilizarea acestor caractere cu „/x” în afara claselor de caractere între paranteze și când nu
precedat de o bară oblică inversă a generat un avertisment de depreciere începând cu v5.18. Acum vor fi
ignorat.

Comentariu linii în „(?[ ])" sunt acum încheiat by a "\n"
„(?[ ])” este o caracteristică experimentală, introdusă în v5.18. Funcționează ca și cum „/x” ar fi
întotdeauna activat. Dar a existat o diferență: linii de comentariu (în urma unui caracter „#”)
au fost terminate cu orice se potrivește cu „\R”, care include toate spațiile verticale, cum ar fi
feed-uri de formulare. Pentru coerență, aceasta este acum schimbată pentru a se potrivi cu ceea ce termină liniile de comentarii
în afara „(?[ ])”, și anume un „\n” (chiar dacă a scăpat), care este același cu ceea ce termină un
heredoc șir și formate.

„(?[...])” Operatorii acum urma standard Perl precedenta
Această caracteristică experimentală permite operațiuni de setare în modele de expresie regulată. Inainte de
aceasta, operatorul de intersecție a avut aceeași prioritate ca și ceilalți operatori binari.
Acum are o prioritate mai mare. Acest lucru ar putea duce la rezultate diferite față de codul existent
se așteaptă (deși documentația a menționat întotdeauna că această schimbare s-ar putea întâmpla,
recomandând parantezia totală a expresiilor). Consultați „Caracter extins cu paranteze
Clasele" în perlrecharclass.

Omitând „%” si „@” on hașiș si mulțime nume is Nu. mai lung permis
Perl foarte vechi vă permite să omiteți „@” pe numele matricei și „%” pe numele hash în unele
pete. Acesta a emis un avertisment de depreciere începând cu Perl 5.000 și nu mai este
permis.

"$!" a) Sport and Nutrition Awareness Day in Manasia Around XNUMX people from the rural commune Manasia have participated in a sports and healthy nutrition oriented activity in one of the community’s sports ready yards. This activity was meant to gather, mainly, middle-aged people from a Romanian rural community and teach them about the benefits that sports have on both their mental and physical health and on how sporting activities can be used to bring people from a community closer together. Three trainers were made available for this event, so that the participants would get the best possible experience physically and so that they could have the best access possible to correct information and good sports/nutrition practices. b) Sports Awareness Day in Poiana Țapului A group of young participants have taken part in sporting activities meant to teach them about sporting conduct, fairplay, and safe physical activities. The day culminated with a football match. is acum in Engleză exterior il domeniu of "utilizare local"
Anterior, textul, spre deosebire de aproape orice altceva, ieșea întotdeauna pe baza curentului
locația de bază a programului. (Afectat și pe unele sisteme este „$^E”.) Pentru programe
care sunt nepregătiți să gestioneze diferențele de localitate, acest lucru poate cauza text gunoi
afișat. Este mai bine să afișați text care poate fi tradus prin intermediul unui instrument decât gunoi
text care este mult mai greu de înțeles.

"$!" a) Sport and Nutrition Awareness Day in Manasia Around XNUMX people from the rural commune Manasia have participated in a sports and healthy nutrition oriented activity in one of the community’s sports ready yards. This activity was meant to gather, mainly, middle-aged people from a Romanian rural community and teach them about the benefits that sports have on both their mental and physical health and on how sporting activities can be used to bring people from a community closer together. Three trainers were made available for this event, so that the participants would get the best possible experience physically and so that they could have the best access possible to correct information and good sports/nutrition practices. b) Sports Awareness Day in Poiana Țapului A group of young participants have taken part in sporting activities meant to teach them about sporting conduct, fairplay, and safe physical activities. The day culminated with a football match. voi be întors in UTF-8 cand adecvat
Strinificarea lui $! și $^E va avea marcajul UTF-8 setat atunci când textul este de fapt
non-ASCII UTF-8. Acest lucru va permite programelor care sunt configurate să fie conștiente de localitate să fie corect
trimite mesaje în limba maternă a utilizatorului. Cod care trebuie să continue 5.20 și
Comportamentul anterior poate face stringificarea atât în ​​domeniul de aplicare a „octeților de utilizare” cât și
„utilizați localitatea „:messages””. În aceste două domenii, alte operațiuni Perl nu vor fi
afectate de locație; doar $! şi $^E stringificare. Pragma „octeți” cauzează UTF-8
flag să nu fie setat, la fel ca în versiunile anterioare Perl. Acest lucru rezolvă [perl #112208]
.

Asistență pentru "?MODEL?" fără explicit operator are fost îndepărtat
Modelul "m?PATTERN?" construct, care permite potrivirea unei expresii regex o singură dată, avea anterior un
formă alternativă care a fost scrisă direct cu un delimitator de semn de întrebare, omițând
operator explicit „m”. Această utilizare a produs un avertisment de depreciere începând cu 5.14.0. Este
acum o eroare de sintaxă, astfel încât semnul întrebării poate fi disponibil pentru utilizare în noi operatori.

„definit(@matrice)” si „definit(%hash)” sunt acum fatal Erori
Acestea au fost depreciate de la v5.6.1 și au generat avertismente de depreciere începând cu v5.16.

Utilizarea a hașiș or an mulțime as a referință sunt acum fatal Erori
De exemplu, „%foo->{"bar"}" cauzează acum o eroare fatală de compilare. Acestea au fost
depreciat încă de înainte de v5.8 și de atunci au ridicat avertismente de depreciere.

Modificări la il „*” prototip
Caracterul „*” din prototipul unei subrutine este folosit pentru a permite cuvintelor goale să aibă prioritate
peste majoritatea numelor de subrutine, dar nu toate. Nu a fost niciodată consecvent și expus buggy
comportament.

Acum a fost schimbat, așa că subrutinele au întotdeauna prioritate față de cuvintele goale, care
îl aduce în conformitate cu funcțiile încorporate prototipuri similare:

sub splat(*) { ... }
sub foo { ... }
splat(foo); # acum întotdeauna splat(foo())
splat(bar); # încă splat('bar') ca înainte
aproape(foo); # close(foo())
close(bar); # close('bar')

Deprecieri


reglaj „${^ENCODING}” la nimic dar "undef"
Această variabilă permite scripturilor Perl să fie scrise într-o altă codificare decât ASCII sau UTF-8.
Cu toate acestea, afectează toate modulele la nivel global, ducând la răspunsuri greșite și la segmentare
defecte. Noile scripturi ar trebui scrise în UTF-8; scripturile vechi ar trebui convertite în UTF-8,
care se realizează cu ușurință cu utilitarul piconv.

Utilizare of negrafic caractere in un singur caracter variabil nume
Sintaxa pentru numele variabilelor cu un singur caracter este mai indulgentă decât pentru variabilele mai lungi
nume, permițând numelui cu un singur caracter să fie un caracter de punctuație sau chiar invizibil (a
negrafic). Perl v5.20 a depreciat controalele din gama ASCII ca un astfel de nume. Acum, toate
caracterele negrafice care erau permise anterior sunt depreciate. Efectul practic al
acest lucru se întâmplă numai atunci când nu se află sub „utilizați utf8” și afectează doar controalele C1 (puncte de cod
de la 0x80 la 0xFF), SPAȚIU FĂRĂ RUpere și CLASIMA MOLE.

Inliniere of „sub () { $var }" cu observabil efecte secundare
În multe cazuri, Perl transformă „sub () { $var }” într-o subrutină constantă inlineabilă,
captarea valorii $var în momentul în care expresia „sub” este evaluată. Aceasta se poate rupe
comportamentul de închidere în acele cazuri în care $var este modificat ulterior, deoarece
subrutina nu va returna valoarea modificată. (Rețineți că toate acestea se aplică numai anonimilor
subrutine cu un prototip gol ("sub ()").)

Această utilizare este acum depreciată în acele cazuri în care variabila ar putea fi modificată
în altă parte. Perl detectează acele cazuri și emite un avertisment de depreciere. Un astfel de cod va
schimbare probabilă în viitor și nu mai produce o constantă.

Dacă variabila dvs. este modificată doar în locul în care este declarată, atunci Perl o va face
continuați să faceți sub inlineable fără avertismente.

sub make_constant {
my $var = shift;
return sub () { $var }; # bine
}

sub make_constant_deprecated {
$varul meu;
$var = shift;
return sub () { $var }; # depreciat
}

sub make_constant_deprecated2 {
my $var = shift;
jurnal_aceea_valoare($var); # ar putea modifica $var
return sub () { $var }; # depreciat
}

În cel de-al doilea exemplu de mai sus, detectarea faptului că $var este alocat o singură dată este prea greu de realizat
detecta. Că se întâmplă într-un alt loc decât declarația „mea” este suficient pentru Perl
gasesc suspect.

Acest avertisment de depreciere are loc numai pentru o variabilă simplă pentru corpul submarinului. (A
Blocul „BEGIN” sau declarația „utilizare” din interiorul sub este ignorat, deoarece nu devine
parte a corpului submarinului.) Pentru cazuri mai complexe, cum ar fi
„sub () { do_something () if 0; $var }” comportamentul s-a schimbat astfel încât inlineing nu
nu se întâmplă dacă variabila este modificabilă în altă parte. Astfel de cazuri ar trebui să fie rare.

Utilizare of multiplu "/X" expresie regulată modificatori
Acum este depreciat să spui ceva ca oricare dintre următoarele:

qr/foo/xx;
/(?xax:foo)/;
utilizați re qw(/amxx);

Adică, acum „x” ar trebui să apară o singură dată în orice șir de expresii regulate contigue
modificatori de model. Nu credem că există vreo apariție a acestui lucru în tot CPAN.
Acest lucru este pregătit pentru o viitoare lansare Perl care să permită „/xx” spațiu alb pentru
lizibilitatea în clase de caractere între paranteze (cele cuprinse între paranteze drepte: „[...]”).

Utilizarea a FARA PAUZA spaţiu in a caracter alias pentru „\N{...}” is acum depreciată
Acest personaj non-grafic este în esență imposibil de distins de un spațiu obișnuit și așadar
nu trebuie permis. Vedeți „ALIASSE PERSONALIZATE” în ​​nume de nume.

A literal „{” acum be scăpat in a model
Dacă doriți o paranteză literală stângă (numită și acoladă stângă) într-un obișnuit
model de expresie, acum ar trebui să-l scăpați fie precedându-l cu o bară oblică inversă
("\{") sau introducându-l între paranteze drepte "[{]", sau folosind "\Q"; altfel a
avertismentul de depreciere va fi lansat. Acest lucru a fost anunțat pentru prima dată în versiunea 5.16
eliberare; va permite extinderile viitoare ale limbii.

Efectuarea toate avertismente fatal is descurajat
Documentația pentru avertismente fatale notează că „utilizați avertismente FATAL => „toate”” este
descurajat și oferă un limbaj mai puternic despre riscurile avertismentelor fatale în general.

Performanţă Îmbunătățiri


· Dacă o metodă sau un nume de clasă este cunoscut în timpul compilării, un hash este precalculat pentru a accelera
căutarea metodei în timpul rulării. De asemenea, numele metodelor compuse precum „SUPER::new” sunt analizate la
timp de compilare, pentru a economisi nevoia de a le analiza în timpul rulării.

· Căutări array și hash (în special cele imbricate) care folosesc doar constante sau simple
variabilele ca chei, sunt acum considerabil mai rapide. Consultați „Modificări interne” pentru mai multe
Detalii.

· „(...)x1”, „(”constant”)x0” și „($scalar)x0” sunt acum optimizate în contextul listei. Dacă
argumentul din dreapta este o constantă 1, operatorul de repetiție dispare. Dacă
Argumentul din dreapta este o constantă 0, întreaga expresie este optimizată pentru gol
listă, atâta timp cât argumentul din stânga este un scalar simplu sau o constantă. (Acesta este,
„(foo())x0” nu este supus acestei optimizări.)

· Atribuirea „substr” este acum optimizată în „substr” cu 4 argumente la sfârșitul lui a
subrutină (sau ca argument pentru „întoarcerea”). Anterior, numai această optimizare
s-a întâmplat în context gol.

· În „\L...”, „\Q...”, etc., opțiunea suplimentară „stringify” este acum optimizată, făcând
acestea la fel de repede ca „lcfirst”, „quotemeta”, etc.

· Atribuirea unei liste goale este acum uneori mai rapidă. În special, nu sună niciodată
„FETCH” pe argumentele legate în partea dreaptă, în timp ce obișnuia să fie uneori.

· Există o îmbunătățire a performanței de până la 20% atunci când „lungimea” este aplicată unui
șir magic, nelegat și fie „utilizați octeți” este în domeniu, fie șirul nu folosește
UTF-8 intern.

· Pe majoritatea versiunilor Perl cu numere întregi pe 64 de biți, utilizarea memoriei pentru non-magice, non-legate
scalarii care conțin doar o valoare în virgulă mobilă au fost reduse cu între 8 și 32
octeți, în funcție de sistemul de operare.

· În „@array = split”, atribuirea poate fi optimizată, astfel încât „split” scrie
direct la matrice. Această optimizare s-a întâmplat numai pentru alte matrice de pachete
decât @_, și doar uneori. Acum această optimizare are loc aproape tot timpul.

· „uniunea” este acum supusă plierii constante. Deci, de exemplu, „ună-te „-”, „a”, „b”” este
convertit la compilare în „ab”. Mai mult, „ună-te” cu un scalar sau constant pentru
separatorul și o listă cu un singur articol de alăturat este simplificată la o stringificare și
separatorul nici nu este evaluat.

· „qq(@array)” este implementat folosind două operațiuni: o operațiune de stringificare și una de unire. Dacă „qq”
nu conține decât o singură matrice, stringificarea este optimizată.

· „$varul nostru” și „al nostru($s,@a,%h)” în context void nu mai sunt evaluate în timpul execuției.
Chiar și o întreagă secvență de „nostru $foo;” declarațiile vor fi pur și simplu sărit peste. La fel
se aplică variabilelor de „stare”.

· Multe funcții interne au fost refactorizate pentru a îmbunătăți performanța și a le reduce
urme de memorie. [perl #121436]
[perl #121906] [perl #121906]


· Testele de fișiere „-T” și „-B” vor reveni mai devreme când este detectat un fișier gol. [perl
#121489]

· Căutările hash în care cheia este o constantă sunt mai rapide.

· Subrutinele cu un prototip gol și un corp care conține doar „undef” sunt acum
eligibil pentru inline. [perl #122728]


· Subrutinele din pachete nu mai trebuie să fie stocate în typeglobs: declararea a
subrutina va pune acum o subreferință simplă direct în depozit, dacă este posibil,
salvarea memoriei. Typeglob-ul încă mai există tețional, așa că accesarea acestuia va cauza
intrarea stash pentru a fi actualizată la un typeglob (de exemplu aceasta este doar o implementare internă
detaliu). Această optimizare nu se aplică în prezent XSUB-urilor sau subrutinelor exportate,
iar apelurile de metodă o vor anula, deoarece memorează în cache lucrurile în typeglobs. [perl #120441]


· Funcțiile „utf8::native_to_unicode()” și „utf8::unicode_to_native()” (vezi utf8)
sunt acum optimizate pe platformele ASCII. Acum nu există nici măcar o performanță minimă
a lovit în scris codul portabil între platformele ASCII și EBCDIC.

· Win32 Perl utilizează cu 8 KB mai puțină memorie per proces decât înainte pentru fiecare proces perl,
deoarece unele date sunt acum mapate în memorie de pe disc și partajate între procesele din
același binar perl.

Module si pragmata


Actualizat Module si pragmata
Multe dintre bibliotecile distribuite cu perl au fost actualizate începând cu v5.20.0. Pentru o
lista completă a modificărilor, rulați:

corelist --dif 5.20.0 5.22.0

Puteți înlocui și versiunea preferată în locul 5.20.0.

Unele modificări notabile includ:

· Archive::Tar a fost actualizat la versiunea 2.04.

Testele pot fi acum rulate în paralel.

· atributele a fost actualizată la versiunea 0.27.

Utilizarea „memEQ-urilor” în XS a fost corectată. [perl #122701]


Evitați să citiți dincolo de sfârșitul unui tampon. [perl #122629]

· B a fost actualizat la versiunea 1.58.

Oferă o nouă funcție „B::safename”, bazată pe existenta „B::GV->SAFENAME”,
care convertește „\cOPEN” în „^OPEN”.

COP-urile anulate sunt acum din clasa „B::COP”, mai degrabă decât „B::OP”.

Obiectele „B::REGEXP” oferă acum o metodă „qr_anoncv” pentru accesarea CV-ului implicit
asociat cu lucruri „qr//” care conțin blocuri de cod și o metodă „compflags” care
returnează steagurile pertinente care provin din op. "qr//blahblah".

„B::PMOP” oferă acum o metodă „pmregexp” care returnează un obiect „B::REGEXP”. Două noi
au fost introduse clasele „B::PADNAME” și „B::PADNAMELIST”.

O eroare în care, după crearea unui thread sau psuedofork, SV-uri speciale/nemuritoare în
ithread/psuedoprocess copil nu a avut clasa corectă de „B::SPECIAL”, a fost
fix. Au fost adăugate metodele „id” și „outid” PADLIST.

· B::Concise a fost actualizat la versiunea 0.996.

Operațiunile nule care fac parte din lanțul de execuție primesc acum numere de secvență.

Steaguri private pentru operațiunile anulate sunt acum aruncate cu mnemonice așa cum ar fi pentru
omologii neanulați.

· B::Deparse a fost actualizat la versiunea 1.35.

Acum se îndepărtează corect de „+sub : attr { ... }” la începutul unei instrucțiuni. Fără
inițialul „+”, „sub” ar fi o etichetă de declarație.

Blocurile „BEGIN” sunt acum emise în locul potrivit de cele mai multe ori, dar schimbarea
din păcate, a introdus o regresie, în care blocurile „BEGIN” apar chiar înainte
în schimb, capătul blocului de închidere poate apărea sub el.

„B::Deparse” nu mai pune „local” eronat aici și acolo, cum ar fi pentru „LIST =
tr/a//d". [perl #119815]

Instrucțiunile adiacente „utilizați” nu mai sunt imbricate accidental dacă una conține un „do”
bloc. [perl #115066]

Matricele între paranteze din listele trecute la „\” sunt acum separate corect cu
paranteze (de exemplu, „\(@a, (@b), @c)” păstrează acum parantezele din jurul @b), astfel
păstrând comportamentul de aplatizare al tablourilor între paranteze la care se face referire. Anterior, ea
a funcționat doar pentru o singură matrice: „\(@a)”.

„local our” este acum eliminat corect, cu „nostru” inclus.

„for($foo; !$bar; $baz) {...}” a fost eliminat fără „!” (sau nu"). Asta a fost
fix.

Cuvintele cheie de bază care intră în conflict cu subrutinele lexicale sunt acum eliminate cu
Prefixul „CORE::”.

„foreach state $x (...) {...}” acum dispare corect cu „state” și nu „meu”.

„our @array = split(...)” acum se îndepărtează corect de „nostru” în acele cazuri în care
atribuirea este optimizată.

Acum dispare „nostru(LISTĂ)" și a tastat corect lexical ("my Dog $spot").

Îndepărtează $#_ ca acela în loc de $#{_}. [perl #123947]


Blocurile BEGIN de la sfârșitul domeniului de aplicare sunt acum îndepărtate în locul potrivit.
[perl #77452]

Blocurile BEGIN au fost uneori departate ca __ANON__, dar acum sunt întotdeauna numite BEGIN.

Subrutinele lexicale sunt acum complet eliminate. [perl #116553]

„Orice =~ y///r” cu „/r” nu mai omite operandul din stânga.

Arborele operațional care alcătuiește blocurile de cod regexp sunt acum îndepărtați în mod real. Anterior, cel
a fost folosit șirul original care a alcătuit expresia regulată. Asta a cauzat probleme
cu „qr/(?{<
[perl #123217] [perl #115256]

$; la sfârșitul unei enunțuri nu își mai pierde punctul și virgulă. [perl #123357]

Unele cazuri de declarații de subrutine stocate în stoc sub formă de scurtătură erau în curs
omis.

Caracterele non-ASCII sunt acum scapat în mod constant în șiruri, în loc de unele dintre ele
timp. (Există încă probleme restante cu expresiile regulate și identificatorii
care nu au fost reparate.)

Când apelurile sub-prototip sunt eliminate cu „&” (de exemplu, Sub -P opțiune), „scalar”
acum este adăugat acolo unde este cazul, pentru a forța contextul scalar implicat de prototip.

„require(foo())”, „do(foo())”, „goto(foo())” și construcții similare cu controale bucle
sunt acum îndepărtate corect. Parantezele exterioare nu sunt opționale.

Spațiul alb nu mai este scăpat în expresiile regulate, pentru că ajungea
scăpat eronat în secțiunile „(?x:...)”.

„sub foo { foo() }” este acum îndepărtat cu acele paranteze obligatorii.

„/@array/” este acum o expresie regulată, și nu doar @array.

„/@{-}/”, „/@{+}/” și $#{1} sunt acum îndepărtate cu acolade, care sunt obligatorii în
aceste cazuri.

În pachetele de caracteristici care părăsesc, „B::Deparse” emite „nicio caracteristică;” mai întâi în loc de
„nicio caracteristică ':all';”. Acest lucru a fost rezolvat.

„chdir FH” este acum îndepărtat fără ghilimele.

„\my @a” este acum îndepărtat fără paranteze. (Parantezele ar aplatiza matricea.)

„system” și „exec” urmate de un bloc sunt acum îndepărtate corect. Anterior acolo
a fost un „do” eronat înainte de bloc.

„utilizați constant QR => qr/.../flags” urmat de „”” =~ QR” nu mai este fără
steaguri.

Se îndepărtează „BEGIN { undef &foo }” cu -w comutatorul activat a început să emită
avertismente „neinițializate” în Perl 5.14. Acest lucru a fost rezolvat.

Îndepărtarea apelurilor către abonați cu un prototip „(;+)” a dus la o buclă infinită. The
Prototipurilor „(;$”) „(_)” și „(;_)” li sa acordat o prioritate greșită, determinând
„foo($a<$b)” să fie îndepărtat fără paranteze.

Deparse oferă acum o stare definită sub în sub-uri interioare.

· B::Op_private a fost adăugat.

B::Op_private oferă informații detaliate despre steagurile utilizate în „op_private”
câmpul opcodes perl.

· bigint, bignum, bigrat au fost actualizate la versiunea 0.39.

Documentați în Avertismente că utilizarea șirurilor de caractere ca numere nu va invoca întotdeauna numărul mare
supraîncărcare și cum să o invocați. [rt.perl.org #123064]

· Carp a fost actualizat la versiunea 1.36.

„Carp::Heavy” ignoră acum nepotrivirile versiunilor cu Carp dacă Carp este mai nou decât 1.12,
deoarece curajul lui "Carp::Heavy" a fost fuzionat în Carp în acel moment. [perl #121574]


Carp gestionează acum mai bine platformele non-ASCII.

Remediere de eroare off-by-one pentru Perl < 5.14.

· constanta a fost actualizată la versiunea 1.33.

Acum acceptă nume de constante complet calificate, permițând definirea constantelor în
alte pachete decât apelantul.

· CPAN a fost actualizat la versiunea 2.11.

Adăugați suport pentru „Cwd::getdcwd()” și introduceți o soluție pentru un comportament greșit văzut pe
Strawberry Perl 5.20.1.

Remediați „chdir()” după construirea erorii de dependențe.

Introduceți suport experimental pentru pluginuri/cârlige.

Integrați sursele „App::Cpan”.

Nu verificați recursiunea pe dependențe opționale.

Control mintal META.yml să conţină un hash. [cpan #95271]


· CPAN::Meta::Requirements a fost actualizat la versiunea 2.132.

Funcționează în jurul limitărilor în „version::vpp” care detectează magia v-string și adaugă suport
pentru viitorul ExtUtils::MakeMaker bootstrap versiunea.pm pentru Perls mai vechi de 5.10.0.

· Data::Dumper a fost actualizat la versiunea 2.158.

Remediază CVE-2014-4330 prin adăugarea unei variabile/opțiuni de configurare pentru a limita recursiunea când
dumpingul structurilor de date profunde.

Modificări pentru a rezolva problemele de acoperire. Dumpurile XS au stocat incorect numele codului
referințe stocate într-un GLOB. [perl #122070]


· DynaLoader a fost actualizat la versiunea 1.32.

Eliminați „dl_nonlazy” global dacă nu este utilizat în Dynaloader. [perl #122926]

· Codificarea a fost actualizată la versiunea 2.72.

„piconv” are acum o gestionare mai bună a erorilor atunci când numele de codificare este inexistent și a
Ruperea build-ului la actualizarea Encode în perl-5.8.2 și anterioare a fost remediată.

Construirea în modul C++ pe Windows funcționează acum.

· Errno a fost actualizat la versiunea 1.23.

Adăugați „-P” la linia de comandă a preprocesorului pe GCC 5. GCC a adăugat directive suplimentare de linie,
întreruperea analizei definițiilor codurilor de eroare. [rt.perl.org #123784]

· experimental a fost actualizat la versiunea 0.013.

Caracteristici hardcodes pentru Perls mai vechi de 5.15.7.

· ExtUtils::CBuilder a fost actualizat la versiunea 0.280221.

Remediază o regresie pe Android. [perl #122675]


· ExtUtils::Manifest a fost actualizat la versiunea 1.70.

Remediază o eroare cu gestionarea de către „maniread()” a numelor de fișiere citate și îmbunătățește „manifind()”
pentru a urma legăturile simbolice. [perl #122415]


· ExtUtils::ParseXS a fost actualizat la versiunea 3.28.

Declarați „fișier” neutilizat doar dacă îl definim de fapt. Îmbunătățiți codul „RETVAL” generat
generație pentru a evita trimiterile repetate la ST(0). [perl #123278] Extindeți și documentați
optimizarea hărții de tip „/OBJ$/” la „/REF$/” pentru metoda „DESTROY”. [perl
# 123418]

· Fcntl a fost actualizat la versiunea 1.13.

Adăugați suport pentru comenzile „fcntl()” pentru dimensiunea bufferului de conducte Linux.

· Fișier::Find a fost actualizat la versiunea 1.29.

„find()” și „finddepth()” vor avertiza acum dacă sunt trecute inadecvat sau scris greșit
opțiuni.

· File::Glob a fost actualizat la versiunea 1.24.

Evitați extinderea „SvIV()” pentru a apela „get_sv()” de trei ori în câteva locuri. [perl
# 123606]

· HTTP::Tiny a fost actualizat la versiunea 0.054.

„keep_alive” este acum sigur pentru furcă și sigur pentru fire.

· IO a fost actualizat la versiunea 1.35.

Implementarea XS a fost remediată de dragul Perls mai vechi.

· IO::Socket a fost actualizat la versiunea 1.38.

Documentați limitările metodei „connected()”. [perl #123096]

· IO::Socket::IP a fost actualizat la versiunea 0.37.

O remediere mai bună pentru subclasarea „connect()”. [cpan #95983]
[cpan #95983]


Implementează Timeout pentru „connect()”. [cpan #92075]


· Colecția de module libnet a fost actualizată la versiunea 3.05.

Suport pentru IPv6 și SSL la „Net::FTP”, „Net::NNTP”, „Net::POP3” și „Net::SMTP”.
Îmbunătățiri în autentificarea „Net::SMTP”.

· Locale::Codes a fost actualizat la versiunea 3.34.

S-a remediat o eroare în scripturile utilizate pentru extragerea datelor din foile de calcul care împiedica
Codul monedei SHP nu a fost găsit. [cpan #94229]


Au fost adăugate coduri noi.

· Math::BigInt a fost actualizat la versiunea 1.9997.

Sincronizați modificările POD din versiunea CPAN. „Math::BigFloat->blog(x)” ar fi
uneori returnează „blog(2*x)” când precizia a fost mai mare de 70 de cifre. Rezultatul
de „Math::BigFloat->bdiv()” în contextul listei acum satisface „x = coeficient * divizor +
rest".

Manipularea corectă a subclaselor. [cpan #96254]
[cpan #96254]


· Module::Metadata a fost actualizat la versiunea 1.000026.

Suportă instalări pe perls mai vechi cu un ExtUtils::MakeMaker mai devreme de 6.63_03

· supraîncărcarea a fost actualizată la versiunea 1.26.

O verificare redundantă „ref $sub” a fost eliminată.

· Colecția de module PathTools a fost actualizată la versiunea 3.56.

Un avertisment din partea gcc compilatorul este acum evitat la construirea XS.

Nu transformați „//” principal în „/” pe Cygwin. [perl #122635]

· perl5db.pl a fost actualizat la versiunea 1.49.

Depanatorul ar cauza un eșec de afirmare. [perl #124127]


„fork()” din depanator sub „tmux” va crea acum o nouă fereastră pentru forked
proces. [perl #121333]

Depanatorul salvează acum directorul de lucru curent la pornire și îl restabilește când
reporniți programul cu „R” sau „rerun”. [perl #121509]


· PerlIO::scalar a fost actualizat la versiunea 0.22.

Citirea dintr-o poziție cu mult peste sfârșitul scalarului returnează acum corect sfârșitul
fişier. [perl #123443]

Căutarea unei poziții negative eșuează, dar nu mai lasă setată poziția fișierului
la o locație de negație.

„eof()” pe un mâner „PerlIO::scalar” returnează acum corect atunci când poziția fișierului
depășește marca de 2 GB pe sistemele pe 32 de biți.

Încercarea de a scrie în poziții de fișiere imposibile pentru platformă acum eșuează devreme
mai degrabă decât ambalarea la 4 GB.

· Pod::Perldoc a fost actualizat la versiunea 3.25.

Filehandlele deschise pentru citire sau scriere au acum setat „:encoding(UTF-8)”. [cpan
#98019]

· POSIX a fost actualizat la versiunea 1.53.

Funcțiile și constantele matematice C99 (de exemplu „acosh”, „isinf”, „isnan”, „round”,
„trunc”; „M_E”, „M_SQRT2”, „M_PI”) au fost adăugate.

„POSIX::tmpnam()” produce acum un avertisment de depreciere. [perl #122005]

· Safe a fost actualizat la versiunea 2.39.

„reval” nu a propagat corect contextul gol.

· Scalar-List-Utils a fost actualizat la versiunea 1.41.

A fost adăugat un nou modul, Sub::Util, care conține funcții legate de codul de referință,
inclusiv „subname” (inspirat de „Sub::Identity”) și „set_subname” (copiat și
redenumit din „Sub::Name”). Utilizarea „GetMagic” în „List::Util::reduce()” are, de asemenea
fost fixat. [cpan #63211]

· SDBM_File a fost actualizat la versiunea 1.13.

A simplificat procesul de construire. [perl #123413]

· Time::Piece a fost actualizat la versiunea 1.29.

Când imprimați destul de negativ „Time::Seconds”, „minus” nu se mai pierde.

· Unicode::Collate a fost actualizat la versiunea 1.12.

Contracțiile discontinue îmbunătățite ale versiunii 0.67 sunt invalidate implicit și sunt
suportat ca parametru „long_contraction”.

· Unicode::Normalize a fost actualizat la versiunea 1.18.

Implementarea XSUB a fost eliminată în favoarea Perl pur.

· Unicode::UCD a fost actualizat la versiunea 0.61.

O noua functie property_values() a fost adăugat pentru a returna o anumită proprietate posibilă
valori.

O noua functie charprop() a fost adăugat pentru a returna valoarea unei proprietăți date pentru a
punct de cod dat.

O noua functie charprops_all() a fost adăugat pentru a returna valorile tuturor Unicode
proprietăți pentru un punct de cod dat.

Un bug a fost remediat astfel încât propagă () returnează numele scurte și lungi corecte
pentru extensiile Perl unde a fost incorect.

Un bug a fost remediat astfel încât prop_value_aliases() returnează „undef” în loc de greșit
rezultat pentru proprietăți care sunt extensii Perl.

Acest modul funcționează acum pe platformele EBCDIC.

· utf8 a fost actualizat la versiunea 1.17

A fost remediată o nepotrivire între documentație și codul din „utf8::downgrade()”.
favoarea documentatiei. Al doilea argument opțional este acum tratat corect ca a
perl boolean (semantică adevărat/fals) și nu ca număr întreg.

· versiunea a fost actualizată la versiunea 0.9909.

Numeroase schimbări. Vezi Modificări fișier în distribuția CPAN pentru detalii.

· Win32 a fost actualizat la versiunea 0.51.

„GetOSName()” acceptă acum Windows 8.1, iar construirea în modul C++ funcționează acum.

· Win32API::Fișierul a fost actualizat la versiunea 0.1202

Construirea în modul C++ funcționează acum.

· XSLoader a fost actualizat la versiunea 0.20.

Permiteți XSLoader să încarce module dintr-un spațiu de nume diferit. [perl #122455]

îndepărtat Module si pragmata
Următoarele module (și modulele asociate) au fost eliminate din perl de bază
distribuție:

· CGI

· Modul::Build

Documentație


Nou Documentație
perlunicook

Acest document, de Tom Christiansen, oferă exemple de manipulare a Unicode în Perl.

Modificări la Existent Documentație
perlaix

· A fost adăugată o notă despre dublu lung.

perlapi

· Rețineți că „SvSetSV” nu face magic set.

· „sv_usepvn_flags” - remediați documentația pentru a menționa utilizarea „Newx” în loc de
„malloc”.

[perl #121869]

· Clarificați unde „NUL” poate fi încorporat sau este necesar pentru a termina un șir.

· Unele documentații care lipseau anterior din cauza erorilor de formatare sunt acum
inclus.

· Intrările sunt acum organizate în grupuri, mai degrabă decât după fișierul în care sunt găsite.

· Sortarea alfabetică a intrărilor se face acum în mod consecvent (în mod automat de către POD
generator) pentru a face intrările mai ușor de găsit la scanare.

perldata

· Sintaxa numelor de variabile cu un singur caracter a fost actualizată și mai mult
explicat pe deplin.

· Sunt descrise numerele hexazecimale în virgulă mobilă, precum infinitul și NaN.

perlebcdic

· Acest document a fost actualizat semnificativ în lumina îmbunătățirilor recente aduse
Suport EBCDIC.

perlfilter

· S-a adăugat o secțiune LIMITĂRI.

perlfunc

· Menționați că „study()” este în prezent un nu-op.

· Apelarea „delete” sau „exists” pe valorile matrice este acum descrisă ca „puternic
descurajat” mai degrabă decât „depreciat”.

· Îmbunătățiți documentația „nostru”.

· „-l” observă acum că va returna false dacă legăturile simbolice nu sunt acceptate de fișier
sistem. [perl #121523]

· Rețineți că „exec LIST” și „system LIST” pot reveni la shell pe Win32. Doar
sintaxa obiectului indirect „exec PROGRAM LIST” și „system PROGRAM LIST” vor fi
evitați utilizarea carcasei.

Acest lucru a fost observat și în perlport.

[perl #122046]

perlguts

· Exemplul OOK a fost actualizat pentru a ține cont de modificările COW și de o modificare a
stocarea offset-ului.

· Detalii despre simbolurile de nivel C și libperl.t adăugate.

· S-au adăugat informații despre gestionarea Unicode

· S-au adăugat informații despre manipularea EBCDIC

perlhack

· A fost adăugată o notă despre rularea pe platforme cu seturi de caractere non-ASCII

· A fost adăugată o notă despre testarea performanței

perlhacktips

· S-a adăugat documentație care ilustrează pericolele presupunerii că nu există
modificarea conținutului memoriei statice indicat de valorile returnate ale lui Perl
wrapper-uri pentru funcțiile bibliotecii C.

· Înlocuirile pentru „tmpfile”, „atoi”, „strtol” și „strtoul” sunt acum recomandate.

· Documentație actualizată pentru ținta „test.valgrind” „make”. [perl #121431]


· Se oferă informații despre scrierea fișierelor de testare portabil pe platforme non-ASCII.

· A fost adăugată o notă despre cum să obțineți o urmărire inversă a stivei în limbaj C.

perlhpux

· Rețineți că mesajul „Redeclararea „sendpath” cu o clasă de stocare diferită
specificatorul” este inofensiv.

perlcale

· Actualizat pentru îmbunătățirile din v5.22, împreună cu unele clarificări.

perlmodstyle

· În loc să arătăm spre lista de module, acum indicăm către PrePAN
<http://prepan.org/>.

perlop

· Actualizat pentru îmbunătățirile din v5.22, împreună cu unele clarificări.

perlpodspec

· Specificațiile limbii pod-urilor se schimbă astfel încât codificarea implicită a pod-urilor
care nu sunt în UTF-8 (dacă nu se indică altfel) este CP1252 în loc de ISO 8859-1
(Latina1).

perlpolicy

· Acum avem un cod de conduită pentru p5p lista de corespondență, așa cum este documentată în „STANDARDE DE
CONDUITĂ” în perlpolicy.

· Condițiile pentru marcarea unei caracteristici experimentale ca neexperimentală sunt acum stabilite
afară.

· S-au făcut clarificări cu privire la tipurile de modificări permise în întreținere
de presă.

perlport

· Informațiile învechite specifice VMS au fost remediate și/sau simplificate.

· Au fost adăugate note despre EBCDIC.

perlre

· Descrierea modificatorului „/x” a fost clarificată pentru a observa că comentariile nu pot
să fie continuat pe linia următoare scăpând de ei; iar acum există o listă cu toate
caractere care sunt considerate spații albe de către acest modificator.

· Este descris noul modificator „/n”.

· A fost adăugată o notă despre cum se face ca intervalele de clase de caractere între paranteze să poată fi
aparate ASCII.

perlrebackslash

· S-a adăugat documentația „\b{sb}”, „\b{wb}”, „\b{gcb}” și „\b{g}”.

perlrecharclass

· Au fost adăugate clarificări la „Intervalele de caractere” în perlrecharclass în acest sens
„[AZ]”, „[az]”, „[0-9]” și orice subinterval ale acestora în expresia regulată între paranteze
clasele de caractere sunt garantate să se potrivească exact cu ceea ce ar face un vorbitor naiv de engleză
așteaptă-te să se potrivească, chiar și pe platforme (cum ar fi EBCDIC) unde perl trebuie să facă mai mult
munca pentru a realiza acest lucru.

· Documentația Claselor de caractere între paranteze a fost extinsă pentru a acoperi
îmbunătățiri în „qr/[\N{secvența denumită}]/” (vezi sub „Remedieri ale erorilor selectate”).

perlref

· A fost adăugată o nouă secțiune Atribuire la referințe

perlsec

· Comentarii adăugate despre complexitatea algoritmică și hashuri legate.

perlsyn

· S-a corectat o ambiguitate în documentația afirmației „...”. [perl
#122661]

· Condiționalul gol din „for” și „while” este acum documentat în perlsyn.

perlunicod

· Acesta a avut revizuiri extinse pentru a-l aduce la zi cu suportul Unicode actual
și pentru a-l face mai lizibil. De remarcat este faptul că Unicode 7.0 a schimbat ceea ce ar trebui să facă
cu non-personaje. Perl păstrează vechiul mod de manipulare din motive de înapoiere
compatibilitate. Vedeți „Puncte de cod fără caractere” în perlunicode.

perluniintro

· Sfaturi despre cum să vă asigurați că șirurile și modelele de expresie regulată sunt
interpretat ca Unicode a fost actualizat.

perlvar

· $] nu mai este listat ca fiind depreciat. În schimb, a fost adăugată discuția pe
avantajele și dezavantajele utilizării acestuia față de $^V. $OLD_PERL_VERSION a fost adăugat din nou
la documentație ca formă lungă de $].

· „${^ENCODING}” este acum marcat ca depreciat.

· Intrarea pentru „%^H” a fost clarificată pentru a indica că poate gestiona doar valori simple.

perlvms

· Materialul învechit și/sau incorect a fost eliminat.

· Documentație actualizată privind interacțiunea cu mediul și shell în VMS.

perlxs

· S-a adăugat o discuție despre problemele locale în codul XS.

Diagnostics


Următoarele completări sau modificări au fost făcute la ieșirea de diagnosticare, inclusiv avertismente
și mesaje de eroare fatale. Pentru lista completă a mesajelor de diagnostic, consultați perldiag.

Nou Diagnostics
Nou Erori

· Simbol greșit pentru scalar

(P) O solicitare internă a cerut adăugarea unei intrări scalare la ceva care nu era un simbol
intrare la tabel.

· Nu se poate folosi un hash ca referință

(F) Ați încercat să utilizați un hash ca referință, ca în „%foo->{"bar"}" sau
„%$ref->{”bună ziua”}”. Versiunile de perl <= 5.6.1 au fost folosite pentru a permite această sintaxă, dar
nu ar fi trebuit.

· Nu se poate folosi o matrice ca referință

(F) Ați încercat să utilizați o matrice ca referință, ca în „@foo->[23]” sau „@$ref->[99]”.
Versiunile de perl <= 5.6.1 au fost folosite pentru a permite această sintaxă, dar nu ar trebui să aibă.

· Nu se poate folosi „defined(@array)” (Poate ar trebui să omiteți definit()?)

(F) „defined()” nu este util pe matrice, deoarece verifică un nedefinit mărime scalară
valoare. Dacă doriți să vedeți dacă matricea este goală, utilizați
„dacă (@array) { # not empty }” de exemplu.

· Nu se poate folosi „defined(%hash)” (Poate ar trebui să omiteți definit()?)

(F) „defined()” nu este de obicei corect pe hashes.

Deși „% hash definit” este fals pe un hash simplu nefolosit încă, devine adevărat în
mai multe circumstanțe neevidente, inclusiv iteratoare, referințe slabe, nume de stocare,
chiar rămânând adevărat după „undef %hash”. Aceste lucruri fac ca „%hash definit” să fie corect
inutil în practică, așa că acum generează o eroare fatală.

Dacă o verificare pentru non-vide este ceea ce ați vrut, atunci puneți-o în context boolean (vezi
„Valori scalare” în perldata):

dacă (%hash) {
# nu este gol
}

Dacă ați „definit %Foo::Bar::QUUX” pentru a verifica dacă o astfel de variabilă de pachet există
atunci asta nu a fost niciodată cu adevărat de încredere și nu este o modalitate bună de a întreba despre
caracteristicile unui pachet sau dacă este încărcat etc.

· Nu se poate chr %f

(F) Ați trecut un număr nevalid (cum ar fi un infinit sau nu-un număr) la „chr”.

· Nu se poate comprima %f în pachet

(F) Ați încercat să convertiți un infinit sau nu-un număr într-un caracter nesemnat, care
nu are niciun sens.

· Nu se poate împacheta %f cu „%c”

(F) Ați încercat să convertiți un infinit sau nu-un număr într-un caracter, ceea ce face ca nu
sens.

· Nu se poate imprima %f cu „%c”

(F) Ați încercat să imprimați un infinit sau nu-un număr ca caracter (%c), ceea ce nu face
sens. Poate te-ai referit la „%s” sau doar la stringe?

· Definițiile alias-urilor de nume nu pot conține o secvență de mai multe spații

(F) Ați definit un nume de caracter care avea mai multe caractere de spațiu pe rând. Schimbare
ele în spații unice. De obicei, aceste nume sunt definite în importul „:alias”.
argument pentru „utilizați nume de nume”, dar acestea ar putea fi definite de un traducător instalat în
$^H{charnames}. Vedeți „ALIASSE PERSONALIZATE” în ​​nume de nume.

· Definițiile aliasului numelor de caractere nu pot conține spații albe

(F) Ați definit un nume de caracter care se termină cu un caracter spațiu. Scoateți
spatiu(le) de urmat. De obicei, aceste nume sunt definite în argumentul de import „:alias” către
„utilizați nume de nume”, dar acestea ar putea fi definite de un traducător instalat în
$^H{charnames}. Vedeți „ALIASSE PERSONALIZATE” în ​​nume de nume.

· :const nu este permis pe subrutinele numite

(F) Atributul „const” face ca o subrutină anonimă să fie rulată și valoarea acesteia
capturat în momentul clonării. Subrutinele numite nu sunt clonate astfel,
deci atributul nu are sens asupra lor.

· Float hexazecimal: eroare internă

(F) Ceva a mers îngrozitor de rău în manipularea floaturilor hexazecimale.

· Float hexazecimal: format dublu lung neacceptat

(F) Ai configurat Perl să folosească duble lungi, dar elementele interne ale dublei lungi
format sunt necunoscute, prin urmare ieșirea hexazecimală flotant este imposibilă.

· Suidscript ilegal

(F) Scriptul rulat sub suidperl a fost cumva ilegal.

· În „(?...)”, „(” și „?” trebuie să fie adiacente în regex; marcate cu <-- AICI în m/%s/

(F) Secvența de două caractere „(?” în acest context într-un model de expresie regulată
ar trebui să fie un simbol indivizibil, fără să intervină nimic între „(” și „?”,
dar i-ai separat.

· În „(*VERB...)”, „(” și „*” trebuie să fie adiacente în regex; marcate cu <-- AICI în
Domnișoară/

(F) Secvența de două caractere „(*” în acest context într-un model de expresie regulată
ar trebui să fie un simbol indivizibil, fără să intervină nimic între „(” și „*”,
dar i-ai separat.

· Cuantificator nevalid în {,} în regex; marcat cu <-- AICI în m/%s/

(F) Modelul arată ca un cuantificator {min,max}, dar min sau max nu ar putea fi
analizat ca număr valid: fie are zerouri înainte, fie reprezintă a prea mare
număr cu care să faci față. <-- AICI arată unde în expresia regulată este problema
a fost descoperit. Vezi perlre.

· „%s” este un tip legat necunoscut în regex

(F) Ați folosit „\b{...}” sau „\B{...}” și „...” nu este cunoscut de Perl. Curent
cele valide sunt date în „\b{}, \b, \B{}, \B” în perlrebackslash.

· Argument lipsă sau nedefinit de solicitat

(F) Ați încercat să apelați „require” fără argument sau cu o valoare nedefinită ca an
argument. „require” așteaptă fie un nume de pachet, fie o specificație de fișier ca un
argument. Vedeți „require” în perlfunc.

Anterior, „require” fără argument sau „undef” avertizat despre un nume de fișier Null.

Nou Avertismente

· \C este depreciat în regex

(D depreciat) Clasa de caractere „/\C/” a fost depreciată în v5.20 și acum emite un
avertizare. Se intenționează că va deveni o eroare în v5.24. Această clasă de caractere
se potrivește cu un singur octet, chiar dacă apare într-un caracter pe mai mulți octeți, se întrerupe
încapsulare și poate deteriora șirurile UTF-8.

· „%s” este scris mai clar ca „%s” în regex; marcat cu <-- AICI în m/%s/

(W regexp) (numai sub „utilizați re „strict”” sau în „(?[...])”)

Ați specificat un caracter care are modalitatea mai simplă de a-l scrie și care este
de asemenea, portabil pe platforme care rulează cu seturi de caractere diferite.

· Argumentul „%s” tratat ca 0 în increment (++)

(W numeric) Șirul indicat a fost introdus ca argument operatorului „++” care
așteaptă fie un număr, fie un șir care să se potrivească cu „/^[a-zA-Z]*[0-9]*\z/”. Vezi „Auto-
increment și Auto-decrement" în perlop pentru detalii.

· Ambele capete ale intervalului sau niciuna nu ar trebui să fie Unicode în regex; marcat cu <-- AICI în m/%s/

(W regexp) (numai sub „utilizați re „strict”” sau în „(?[...])”)

Într-o clasă de caractere între paranteze într-un model de expresie regulată, aveai un interval care
are exact un capăt al acestuia specificat folosind „\N{}”, iar celălalt capăt este specificat folosind
un mecanism neportabil. Perl tratează intervalul ca pe un interval Unicode, adică toate
caracterele din acesta sunt considerate caractere Unicode și care pot fi
diferite puncte de cod pe unele platforme pe care rulează Perl. De exemplu, „[\N{U+06}-\x08]”
este tratat ca și cum ați fi spus în schimb „[\N{U+06}-\N{U+08}]”, adică se potrivește cu
caractere ale căror puncte de cod în Unicode sunt 6, 7 și 8. Dar acel „\x08” ar putea
indicați că ați vrut să spuneți ceva diferit, așa că avertismentul este lansat.

· Nu se poate face %s(„%s”) în local non-UTF-8; rezolvat la „%s”.

(W locale) Sunteți 1) care rulați sub „„use locale””; 2) localitatea curentă nu este a
UTF-8 unul; 3) ați încercat să faceți operațiunea de schimbare a majusculei desemnată în cazul specificat
caracter Unicode; și 4) rezultatul acestei operațiuni ar amesteca Unicode și locale
reguli, care probabil intră în conflict.

Categoria de avertismente „locale” este nouă.

· :const este experimental

(S experimental::const_attr) Atributul „const” este experimental. Dacă dorești
utilizați funcția, dezactivați avertismentul cu „fără avertismente „experimental::const_attr””,
dar să știți că, făcând acest lucru, vă asumați riscul ca codul dvs. să se rupă în viitor
Versiunea Perl.

· gmtime(%f) a eșuat

(W overflow) Ai sunat „gmtime” cu un număr pe care nu l-a putut gestiona: prea mare,
prea mic, sau NaN. Valoarea returnată este „undef”.

· Float hexazecimal: depășire exponent

(W overflow) Virgula flotantă hexazecimală are exponent mai mare decât cea flotantă
suporturi punctuale.

· Flotare hexazecimală: exponent underflow

(W overflow) Virgula flotantă hexazecimală are exponent mai mic decât cea flotantă
suporturi punctuale.

· Flotare hexazecimală: preaplin mantisă

(W overflow) Literalul hexazecimal cu virgulă mobilă a avut mai mulți biți în mantise (the
partea dintre „0x” și exponent, cunoscută și sub denumirea de fracție sau semnificant)
decât suporturile în virgulă mobilă.

· Float hexazecimal: pierdere de precizie

(W overflow) Virgula mobilă hexazecimală avea în interior mai multe cifre decât ar putea fi
ieșire. Acest lucru poate fi cauzat de formatele duble lungi neacceptate sau de numere întregi pe 64 de biți
nefiind disponibil (necesar pentru a prelua cifrele în unele configurații).

· Localitatea „%s” poate să nu funcționeze bine.%s

(W locale) Utilizați localul numit, care este unul non-UTF-8 și care perl
a stabilit că nu este pe deplin compatibil cu ceea ce poate face față. Al doilea %s dă a
motiv.

Categoria de avertismente „locale” este nouă.

· ora locală (%f) a eșuat

(W overflow) Ați sunat „ora locală” cu un număr pe care nu l-a putut gestiona: prea mare,
prea mic, sau NaN. Valoarea returnată este „undef”.

· Numărarea repetată negativă nu face nimic

(W numeric) Ați încercat să executați operatorul de repetiție „x” de mai puțin de 0 ori, ceea ce
nu are sens.

· NO-BREAK SPACE într-o definiție de alias Charnames este depreciată

(D depreciat) Ați definit un nume de caracter care conținea un spațiu fără întrerupere
caracter. Schimbați-l într-un spațiu obișnuit. De obicei, aceste nume sunt definite în
Argumentul de import „:alias” pentru „utilizați nume de nume”, dar acestea ar putea fi definite de un traducător
instalat în $^H{charnames}. Vedeți „ALIASSE PERSONALIZATE” în ​​nume de nume.

· Numărarea repetată nefinită nu face nimic

(W numeric) Ați încercat să executați operatorul de repetiție „x” „Inf” (sau „-Inf”) sau NaN
ori, ceea ce nu are sens.

· Stratul PerlIO „:win32” este experimental

(S experimental::win32_perlio) Stratul PerlIO „:win32” este experimental. Dacă doriți
pentru a-ți asuma riscul de a utiliza acest strat, pur și simplu dezactivează acest avertisment:

fără avertismente „experimental::win32_perlio”;

· Intervalele de imprimabile ASCII ar trebui să fie un subset de „0-9”, „AZ” sau „az” în regex;
marcat cu <-- AICI în m/%s/

(W regexp) (numai sub „utilizați re „strict”” sau în „(?[...])”)

Reguli mai stricte ajută la găsirea greșelilor de scriere și a altor erori. Poate că nici nu ai intenționat a
interval aici, dacă „-” a fost menit să fie un alt caracter sau ar fi trebuit să fie
scăpat (cum ar fi „\-”). Dacă ați intenționat o gamă, cea care a fost folosită nu este portabilă
între platformele ASCII și EBCDIC și nu are o semnificație evidentă pentru un ocazional
cititor.

[3-7] # OK; Evident și portabil
[dg] # OK; Evident și portabil
[AY] # OK; Evident și portabil
[Az] # GREȘIT; Nu portabil; nu este clar ce se înțelege
[aZ] # GREȘIT; Nu portabil; nu este clar ce se înțelege
[%-.] # GRESIT; Nu portabil; nu este clar ce se înțelege
[\x41-Z] # GREȘIT; Nu portabil; nu este evident pentru non-geek

(Puteți forța portabilitatea specificând un interval Unicode, ceea ce înseamnă că
punctele finale sunt specificate prin „\N{...}”, dar semnificația poate să nu fie totuși evidentă.)
regulile mai stricte necesită ca intervalele care încep sau se opresc cu un caracter ASCII, adică
nu un control are toate punctele finale să fie un caracter literal și nu o scăpare
secvență (cum ar fi „\x41”), iar intervalele trebuie să fie toate cifrele sau toate literele mari,
sau toate literele mici.

· Intervalele de cifre ar trebui să fie din același grup în regex; marcat cu <-- AICI în m/%s/

(W regexp) (numai sub „utilizați re „strict”” sau în „(?[...])”)

Reguli mai stricte ajută la găsirea greșelilor de scriere și a altor erori. Ai inclus un interval, iar la
cel puțin unul dintre punctele finale este o cifră zecimală. Conform regulilor mai stricte, atunci când aceasta
se întâmplă, ambele puncte finale ar trebui să fie cifre din același grup de 10 cifre consecutive.

· Argument redundant în %s

(W redundant) Ați apelat o funcție cu mai multe argumente decât erau necesare, așa cum este indicat
prin informații din alte argumente pe care le-ați furnizat (de exemplu,. un format printf). În prezent
emis numai atunci când un format de tip printf necesita mai puține argumente decât au fost furnizate,
dar ar putea fi folosit în viitor pentru de exemplu „pachet” în perlfunc.

Categoria de avertismente „redundante” este nouă. Vezi și [perl #121025]
.

· Lista de înlocuire este mai lungă decât lista de căutare

Acesta nu este un diagnostic nou, dar în versiunile anterioare nu a fost afișat accidental
dacă transliterarea conținea caractere largi. Acest lucru este acum rezolvat, astfel încât să puteți
vezi acest diagnostic în locuri în care anterior nu ai făcut-o (dar ar fi trebuit).

· Folosirea \b{} pentru locale non-UTF-8 este greșită. Presupunând un local UTF-8

(W locale) Potriviți o expresie regulată folosind reguli locale și un Unicode
limita este în curs de potrivire, dar localitatea nu este una Unicode. Asta nu face
sens. Perl va continua, presupunând o locație Unicode (UTF-8), dar rezultatele ar putea
bine să fie greșit, cu excepția cazului în care localul se întâmplă să fie ISO-8859-1 (Latin1) unde acest lucru
mesajul este fals și poate fi ignorat.

Categoria de avertismente „locale” este nouă.

· Folosind /u pentru „%s” în loc de /%s în regex; marcat cu <-- AICI în m/%s/

(W regexp) Ați folosit o limită Unicode ("\b{...}" sau "\B{...}") într-o porțiune a unui
expresie regulată în care modificatorii setului de caractere „/a” sau „/aa” sunt în vigoare.
Acești doi modificatori indică o interpretare ASCII, iar acest lucru nu are sens pentru
o definiție Unicode. Expresia regulată generată se va compila astfel încât
boundary folosește tot Unicode. Nicio altă parte a expresiei regulate nu este afectată.

· Caracteristica biți este experimentală

(S experimental::bit) Acest avertisment este emis dacă utilizați operatori pe biți ("& | ^
~ &. |. ^. ~.") cu funcția „bit-bit” activată. Pur și simplu suprimați avertismentul dacă
doriți să utilizați funcția, dar să știți că, făcând acest lucru, vă asumați riscul
folosind o caracteristică experimentală care se poate modifica sau poate fi eliminată într-o versiune Perl viitoare:

fără avertismente „experimental::bitwise”;
utilizați caracteristica „bitwise”;
$x |.= $y;

· Acolada stângă fără escape în regex este depreciată, trecută în regex; marcat cu <--
AICI în m/%s/

(D depreciat, regexp) Ați folosit un caracter literal „{” într-o expresie regulată
model. Ar trebui să utilizați „\{” în schimb, deoarece o versiune viitoare de Perl
(provizoriu v5.26) va considera aceasta a fi o eroare de sintaxă. Dacă modelul
delimitatorii sunt, de asemenea, acolade, orice acoladă dreaptă care se potrivește ("}") ar trebui, de asemenea, să fie eliminată
evitați să confundați analizatorul, de exemplu,

qr{abc\{def\}ghi}

· Utilizarea caracterelor literale negrafice în numele variabilelor este depreciată

(D depreciat) Utilizarea de caractere literale negrafice (inclusiv de control) în sursă
pentru a face referire la ^FOO variabile, cum ar fi $^X și „${^GLOBAL_PHASE}” sunt acum depreciate.

· Utilizarea inutilă a atributului „const”

(W misc) Atributul „const” nu are efect decât asupra prototipurilor de închidere anonime.
L-ați aplicat unei subrutine prin attributes.pm. Acest lucru este util doar în interiorul unui
handler de atribute pentru o subrutină anonimă.

· Utilizarea inutilă a modificatorului /d în operatorul de transliterare

Acesta nu este un diagnostic nou, dar în versiunile anterioare nu a fost afișat accidental
dacă transliterarea conținea caractere largi. Acest lucru este acum rezolvat, astfel încât să puteți
vezi acest diagnostic în locuri în care anterior nu ai făcut-o (dar ar fi trebuit).

· „utilizați re „strict”” este experimental

(S experimental::re_strict) Lucrurile care sunt diferite atunci când o expresie regulată
modelul este compilat sub „strict” pot fi modificate în viitoarele versiuni Perl în
moduri incompatibile; există, de asemenea, propuneri de modificare a modului de activare a verificării stricte
în loc de a folosi această subpragma. Aceasta înseamnă că un model care se compilează astăzi poate
nu într-o viitoare versiune Perl. Acest avertisment este pentru a vă avertiza cu privire la acest risc.

· Avertisment: nu se poate închide corect filehandle: %s

Avertisment: nu se poate închide corect mânerul de fișier %s: %s

(S io) Anterior, perl ignora în tăcere orice eroare când făcea o închidere implicită a lui a
mâner de fișier, de exemplu unde numărul de referințe al filehandle-ului a ajuns la zero și
codul utilizatorului nu a numit deja „close()”; de exemplu

{
deschide-mi $fh, '>', $fisierul sau mori "deschide: '$fisier': $!\n";
print $fh, $data sau die;
} # implicit aproape aici

Într-o situație precum discul plin, din cauza tamponării, eroarea poate fi detectată numai
în timpul închiderii finale, deci a nu verifica rezultatul închiderii este periculoasă.

Deci perl avertizează acum în astfel de situații.

· Caracter lat (U+%X) în %s

(localizare W) În timp ce se află într-o locație cu un singur octet (de exemplu, unul non-UTF-8), un multi-octet
personajul a fost întâlnit. Perl consideră că acest caracter este Unicode specificat
punct de cod. Combinarea localităților non-UTF-8 și Unicode este periculoasă. Aproape sigur
unele personaje vor avea două reprezentări diferite. De exemplu, în ISO
8859-7 (greacă), punctul de cod 0xC3 reprezintă un Gamma capitală. Dar așa și
face 0x393. Acest lucru va face comparațiile de șiruri nesigure.

Probabil că trebuie să vă dați seama cum acest caracter pe mai mulți octeți s-a amestecat cu dvs
local cu un singur octet (sau poate ați crezut că aveți un local UTF-8, dar Perl
nu este de acord).

Categoria de avertismente „locale” este nouă.

Modificări la Existent Diagnostics
· <> ar trebui să fie ghilimele

Acest avertisment a fost schimbat în <> la declarația require-ar trebui să fie ghilimele pentru a face
problemă mai identificabilă.

· Argumentul „%s” nu este numeric%s

Intrarea perldiag pentru acest avertisment a adăugat această notă de clarificare:

Rețineți că pentru Inf și NaN (infinit și nu-un număr)
definiția „numericului” este oarecum neobișnuită: șirurile în sine
(cum ar fi „Inf”) sunt considerate numerice, iar orice le urmează este
considerate nenumerice.

· Simbolul global „%s” necesită un nume explicit al pachetului

Acest mesaj a fost atașat cu „(ai uitat să declari „%s-ul meu”?)” pentru a-l face
mai util pentru noii programatori Perl. [perl #121638]


· Variabila „„mea” &foo::bar nu poate fi într-un pachet” a fost reformulată pentru a spune „subrutină”
în loc de „variabilă”.

· \N{} în clasa de caractere limitată la un caracter în expresia regex; marcat cu <-- AICI în
Domnișoară/

Acest mesaj a avut caracter clasă schimbat în inversat caracter clasă or as a gamă
punctul final is pentru a reflecta îmbunătățirile în „qr/[\N{secvența denumită}]/” (vezi sub
„Remedieri ale erorilor selectate”).

· panică: frex

Acest mesaj a avut „: %f” atașat la el, pentru a arăta care este virgulă mobilă ofensătoare
numărul este.

· Posibil precedenta problemă on bitwise %c operator reformulat ca Prioritate posibilă
problemă la operatorul %s pe biți.

· %s nereușit pe numele fișierului care conține linia nouă

Acest avertisment este acum produs numai atunci când linia nouă se află la sfârșitul numelui fișierului.

· „Variabila %s nu va rămâne partajată” a fost schimbată pentru a spune „Subrutină” atunci când este
de fapt un sub lexical care nu va rămâne partajat.

· Lungimea variabilă în urmă nu este implementată în expresia regex m/%s/

Intrarea perldiag pentru acest avertisment a adăugat informații despre comportamentul Unicode.

Diagnostic eliminările
· „Utilizarea ambiguă a lui -foo rezolvată ca -&foo()"

Nu există de fapt nicio ambiguitate aici, iar acest lucru împiedică utilizarea constantelor negate;
de exemplu, „-Inf”.

· „Constant nu este o referință FOO”

Verificarea la compilare a dereferențării constante (de exemplu, „my_constant->()”) a fost
eliminat, deoarece nu ținea cont de supraîncărcare. [perl #69456]
[perl #69456]


Utilitate Modificări


find2perl, s2p si a2 p îndepărtare
· x2p/ directorul a fost eliminat din nucleul Perl.

Aceasta elimină find2perl, s2p și a2p. Toate au fost eliberate la CPAN ca separat
distribuții ("App::find2perl", "App::s2p", "App::a2p").

h2ph
· h2ph acum gestionează constantele hexazecimale în definițiile macro predefinite ale compilatorului,
așa cum este vizibil în $Config{cppsymbols}. [perl #123784]
.

encguess
· Nu mai depinde de modulele non-core.

Configuraţie si Compilation


· Configurare acum verifică „lrintl()”, „lroundl()”, „llrintl()” și „llroundl()”.

· Configurare cu „-Dmksymlinks” ar trebui să fie acum mai rapid. [perl #122002]
.

· Bibliotecile „pthreads” și „cl” vor fi legate implicit dacă sunt prezente. Asta permite
Module XS care necesită threading pentru a funcționa pe perls non-threaded. Rețineți că trebuie
trece totuși „-Dusethreads” dacă vrei un perl threaded.

· Pentru a obține mai multă precizie și gamă pentru numerele în virgulă mobilă, se poate utiliza acum GCC
biblioteca quadmath care implementează numerele cu virgulă mobilă cu precizie cvadruplă
platforme x86 și IA-64. Vedea INSTALARE pentru detalii.

· MurmurHash64A și MurmurHash64B pot fi acum configurate ca funcție hash internă.

· „make test.valgrind” acceptă acum testarea paralelă.

De exemplu:

TEST_JOBS=9 face test.valgrind

Consultați „valgrind” în perlhacktips pentru mai multe informații.

[perl #121431]

· Opțiunea de construcție MAD (Misc Attribute Decoration) a fost eliminată

Aceasta a fost o încercare neîntreținută de a păstra mai fidel arborele de analiză Perl
că conversia automată a Perl 5 în Perl 6 ar fi fost mai ușoară.

Această opțiune de configurare în timpul construirii nu a fost întreținută de ani de zile și probabil că a fost
diverge serios atât pe Perl 5 cât și pe Perl 6.

· Este disponibil un nou semnal de compilare, „-DPERL_OP_PARENT”. Pentru detalii, consultați
discuție de mai jos la „Modificări interne”.

· Pathtools nu mai încearcă să încarce XS pe miniperl. Acest lucru accelerează construirea perl
puțin.

Testarea


· t/porting/re_context.t a fost adăugat pentru a testa faptul că utf8 și dependențele sale folosesc numai
subsetul variantelor de captură „$1..$n” pentru care „Perl_save_re_context()” este codificat
localize, deoarece acea funcție nu are o modalitate eficientă de a determina în timpul execuției ce
vars pentru a localiza.

· Testele pentru probleme de performanță au fost adăugate în fișier t/perf/taint.t.

· Unele teste de expresie regulată sunt scrise în așa fel încât vor rula foarte încet
dacă anumite optimizări se sparg. Aceste teste au fost mutate în fișiere noi,
t/re/viteza.t si t/re/speed_thr.t, și sunt rulate cu un „watchdog()”.

· „test.pl” permite acum „plan skip_all => $reson”, pentru a-l face mai compatibil cu
„Test::Mai mult”.

· Un nou script de testare, op/infnan.t, a fost adăugat pentru a testa dacă infinitul și NaN funcționează
corect. Consultați „Manevrarea infinitului și NaN (nu-un număr) îmbunătățită”.

Platformă Asistență


recâștigat Platforme
Platformele IRIX și Tru64 funcționează din nou.
Unele eșecuri ale „facerii testului” rămân: [perl #123977]
și [perl #123977]
pentru IRIX; [perl #125298]
, [cpan #124212]
și [cpan #99605]
pentru Tru104836.

z/OS care rulează pagina de cod EBCDIC 1047
Core Perl funcționează acum pe această platformă EBCDIC. Perl-urile anterioare au funcționat și ele, dar chiar
deși suportul nu a fost retras oficial, perl-urile recente nu ar fi compilat și rulat
bine. Perl 5.20 ar funcționa, dar avea multe erori care acum au fost remediate. Multe CPAN
modulele care sunt livrate cu Perl eșuează în continuare testele, inclusiv „Pod::Simple”. Însă
versiunea „Pod::Simple” aflată în prezent pe CPAN ar trebui să funcționeze; a fost reparat prea târziu pentru
include în Perl 5.22. Se lucrează pentru a repara multe dintre modulele CPAN încă stricate,
care probabil va fi instalat pe CPAN când este finalizat, astfel încât s-ar putea să nu fie nevoie
așteptați până la Perl 5.24 pentru a obține o versiune funcțională.

întrerupte Platforme
Următorul PAS/OPENSTEP
NeXTSTEP a fost un sistem de operare proprietar la pachet cu stațiile de lucru NeXT din
începutul până la mijlocul anilor 90; OPENSTEP a fost o specificație API care a furnizat un NeXTSTEP asemănător
mediu pe un sistem non-NeXTSTEP. Ambele sunt acum morți de mult, așa că sprijin pentru construcție
Perl de pe ele a fost eliminat.

Specific platformei notițe
EBCDIC
Este necesară o manipulare specială a interpretului perl pe platformele EBCDIC pentru a obține
„qr/[ij]/” să se potrivească numai „i” și „j”, deoarece există 7 caractere între cod
puncte pentru „i” și „j”. Această manipulare specială fusese invocată numai atunci când ambele capete ale
intervalul sunt literale. Acum este de asemenea invocat dacă oricare dintre formele „\N{...}” pentru
specificarea unui caracter după nume sau punct de cod Unicode este folosită în locul unui literal.
Vedeți „Intervalele de caractere” în perlrecharclass.

HP-UX
Arhinumele distinge acum use64bitint de use64bitall.

Android
Suportul pentru compilare a fost îmbunătățit pentru compilarea încrucișată în general și pentru Android în
special.

extensia VMS
· Când generează un subproces fără așteptare, valoarea returnată este acum cea corectă
PID.

· Remediați un prototip, astfel încât legătura să nu eșueze sub compilatorul VMS C++.

· Detectarea „finite”, „finitel” și „isfinite” a fost adăugată la „configure.com”,
Gestionarea mediului a avut câteva modificări minore și o remediere pentru caracteristica moștenită
verificarea stării.

Win32
· miniperl.exe este acum construit cu „-fno-strict-aliasing”, permițând build-urilor pe 64 de biți
complet pe GCC 4.8. [perl #123976]


· „nmake minitest” funcționează acum pe Win32. Din cauza problemelor de dependență pe care trebuie să le construiți
„nmake test-prep” mai întâi și un număr mic de teste eșuează. [perl #123394]


· Perl poate fi acum construit în modul C++ pe Windows prin setarea macro-ului makefile
„USE_CPLUSPLUS” la valoarea „define”.

· Forma de listă a deschis prin conducte a fost implementată pentru Win32. Notă: spre deosebire de „system
LIST" aceasta nu se întoarce la shell. [perl #121159]


· Noi opțiuni de configurare „DebugSymbols” și „DebugFull” adăugate în Windows
makefiles.

· Anterior, compilarea modulelor XS (inclusiv cele CPAN) folosind Visual C++ pentru Win64
a dus la aproximativ o duzină de avertismente pe fișier de la hv_func.h. Aceste avertismente au
fost redus la tăcere.

· Suportul pentru construirea fără PerlIO a fost eliminat din fișierele de make Windows.
Compilările non-PerlIO au fost aproape depreciate în Perl 5.18.0 și nu sunt deja
susținută de Configurare pe sistemele POSIX.

· Între 2 și 6 milisecunde și șapte apeluri I/O au fost salvate la fiecare încercare
deschideți un modul perl pentru fiecare cale din @INC.

· Compilările Intel C sunt acum întotdeauna construite cu modul C99 activat.

· %I64d este folosit acum în loc de %lld pentru MinGW.

· În stratul experimental „:win32”, a fost remediată o blocare în „open”. De asemenea, deschidere
/ Dev / null (care funcționează sub stratul implicit „:unix” Win32 Perl) a fost implementat
pentru „:win32”. [perl #122224]

· O nouă opțiune makefile, „USE_LONG_DOUBLE”, a fost adăugată la dmake Windows
makefile numai pentru versiunile gcc. Setați acest lucru la „definiți” dacă doriți ca perl să folosească lung
se dublează pentru a oferi mai multă precizie și gamă pentru numerele în virgulă mobilă.

OpenBSD
Pe OpenBSD, Perl va folosi implicit sistemul „malloc” din cauza securității
caracteristicile pe care le oferă. Învelișul malloc al lui Perl a fost utilizat începând cu v5.14 din cauza
motive de performanță, dar proiectul OpenBSD consideră că compromisul merită și
ar prefera ca utilizatorii care au nevoie de viteză să o solicite în mod special.

[perl #122000] .

Solaris
· Căutăm acum compilatorul Sun Studio în ambele /opt/solstudio* si
/opt/solarisstudio*.

· Construcțiile pe Solaris 10 cu „-Dusedtrace” ar eșua mai devreme, deoarece make nu a urmat
dependențe implicite pentru a construi „perldtrace.h”. S-a adăugat o dependență explicită la
"depinde". [perl #120120]

· Opțiunile C99 au fost curățate; indicii caută „solstudio” precum și
„SUNWspro”; și a fost adăugat suport pentru „setenv” nativ.

Intern Modificări


· S-a adăugat suport experimental pentru a permite operațiunilor din opțiunea să-și găsească părintele,
dacă există. Acest lucru este activat de opțiunea de compilare care nu este implicită „-DPERL_OP_PARENT”. Este
a avut în vedere că acest lucru va deveni în cele din urmă activat în mod implicit, deci codul XS care
accesează direct câmpul operațiunilor „op_sibling” ar trebui actualizat pentru a fi viitor-
dovedit.

În versiunile „PERL_OP_PARENT”, câmpul „op_sibling” a fost redenumit „op_sibparent” și
a adăugat un nou steag, „op_moresib”. La ultima operațiune dintr-un lanț de frați, „op_moresib” este
false și „op_sibparent” indică către părinte (dacă există) în loc să fie „NULL”.

Pentru ca codul existent să funcționeze în mod transparent, indiferent dacă utilizați „PERL_OP_PARENT” sau nu, a
au fost adăugate un număr de macrocomenzi și funcții noi care ar trebui folosite, mai degrabă decât
manipulând direct „op_frate”.

În cazul citirii „op_sibling” pentru a determina următorul frate, două noi
au fost adăugate macrocomenzi. O scanare simplă printr-un lanț de frați ca acesta:

pentru (; copil->op_frate; copil = copil->op_frate) { ... }

acum ar trebui scris ca:

pentru (; OpHAS_SIBLING(copil); copil = OpSIBLING(copil)) { ... }

Pentru modificarea optrees, a fost adăugată o funcție de uz general „op_sibling_splice()”,
care permite manipularea unui lanț de operațiuni de frați. Prin analogie cu Perl
funcția „splice()”, vă permite să tăiați zero sau mai multe operațiuni dintr-un lanț de frați
și înlocuiți-le cu zero sau mai multe operațiuni noi. Se ocupă în mod transparent de toate actualizările
de frate, părinte, op_last pointers etc.

Dacă trebuie să manipulați operațiunile la un nivel inferior, atunci trei macrocomenzi noi,
„OpMORESIB_set”, „OpLASTSIB_set” și „OpMAYBESIB_set” sunt destinate a fi un nivel scăzut
modalitate portabilă de a seta „op_sibling” / „op_sibparent” în timp ce se actualizează și „op_moresib”.
Primul setează indicatorul fratelui către un nou frate, al doilea face ca opțiunea să fie ultima
frate, iar al treilea face în mod condiționat prima sau a doua acțiune. Rețineți că
spre deosebire de „op_sibling_splice()”, aceste macrocomenzi nu vor menține consistența în părinte la
acelasi timp (de exemplu prin actualizarea „op_first” și „op_last” acolo unde este cazul).

O funcție „Perl_op_parent()” la nivel C și o metodă „B::OP::parent()” la nivel Perl au
fost adăugată. Funcția C există numai în versiunile „PERL_OP_PARENT” (folosind-o este
eroare de construcție pe vanilla perls). „B::OP::parent()” există întotdeauna, dar pe o vanilie
build it returnează întotdeauna „NULL”. Sub „PERL_OP_PARENT”, ei returnează părintele
operațiune curentă, dacă există. Variabila $B::OP::does_parent vă permite să determinați dacă
„B” acceptă recuperarea părintelui unei operațiuni.

„PERL_OP_PARENT” a fost introdus în 5.21.2, dar interfața a fost schimbată considerabil
în 5.21.11. Dacă v-ați actualizat codul înainte de modificările din 5.21.11, poate fi necesar
revizuire ulterioară. Principalele modificări după 5.21.2 au fost:

· Macrocomenzile „OP_SIBLING” și „OP_HAS_SIBLING” au fost redenumite „OpSIBLING” și
„OpHAS_SIBLING” pentru coerență cu alte macrocomenzi de manipulare operațională.

· Câmpul „op_lastsib” a fost redenumit „op_moresib”, iar sensul său a fost inversat.

· Macrocomanda „OpSIBLING_set” a fost eliminată și a fost înlocuită de
„OpMORESIB_set” et al.

· Funcția „op_sibling_splice()” acceptă acum un argument „părinte” nul unde
Îmbinarea nu afectează primele sau ultimele operațiuni din lanțul de frați

· Macro-urile au fost create pentru a permite codului XS să manipuleze mai bine locația POSIX
categoria „LC_NUMERIC”. Consultați „Funcții și macrocomenzi legate de localitate” în perlapi.

· „atoi” anterior et al funcția de înlocuire, „grok_atou”, a fost acum înlocuită
de „grok_atoUV”. Consultați perlclib pentru detalii.

· A fost adăugată o nouă funcție, „Perl_sv_get_backrefs()”, care vă permite să preluați
referințe slabe, dacă există, care indică un SV.

· Funcția „screaminstr()” a fost eliminată. Deși marcat ca API public, a fost
nedocumentat și nu a avut nicio utilizare în modulele CPAN. Apelarea a fost fatală din 5.17.0.

· Funcțiile „newDEFSVOP()”, „block_start()”, „block_end()” și „intro_my()” au
a fost adăugat la API.

· Funcția internă „conversie” în op.c a fost redenumit „op_convert_list” și adăugat
la API.

· Funcția „sv_magic()” nu mai interzice magia „ext” pe valorile numai în citire. După
toate, perl nu poate ști dacă magia personalizată va modifica SV sau nu. [perl
#123103] .

· Accesarea „CvPADLIST” în perlapi pe un XSUB este acum interzisă.

Câmpul „CvPADLIST” a fost reutilizat pentru un alt scop intern pentru XSUB. Asa de
în special, nu vă mai puteți baza că este NULL ca test pentru a stabili dacă un CV este un
XSUB. Folosiți „CvISXSUB()” în schimb.

· SV-urile de tip „SVt_NV” sunt acum uneori lipsite de corp atunci când configurația de construcție și
platforma permite acest lucru: în special, când „sizeof(NV) <= sizeof(IV)”. „Fără trup” înseamnă
că valoarea NV este stocată direct în capul unui SV, fără a necesita a
organism separat care urmează să fie alocat. Acest truc a fost deja folosit pentru IV-uri din 5.9.2
(deși în cazul IV-urilor, este întotdeauna utilizat, indiferent de platformă și construcție
configurație).

· Variabilele $DB::single, $DB::signal și $DB::trace au acum set- și get-magic care
stochează valorile lor ca IV-uri, iar acele IV-uri sunt utilizate la testarea valorilor lor în
„pp_dbstate()”. Acest lucru împiedică perl să recurgă la infinit dacă un obiect supraîncărcat
este atribuit oricăreia dintre aceste variabile. [perl #122445]
.

· „Perl_tmps_grow()”, care este marcat ca API public, dar este nedocumentat, a fost
eliminat din API-ul public. Această modificare nu afectează codul XS care utilizează
Macrocomandă „EXTEND_MORTAL” pentru a pre-extinde stiva mortală.

· Elementele interne ale lui Perl nu mai setează sau utilizează steag-ul „SVs_PADMY”. „SvPADMY()” revine acum
o valoare adevărată pentru orice nu este marcat „PADTMP” și „SVs_PADMY” este acum definită ca 0.

· Macro-urile „SETsv” și „SETsvUN” au fost eliminate. Nu mai erau folosite în
core de la commit 6f1401dc2a acum cinci ani și nu au fost găsite prezente pe CPAN.

· Bitul „SvFAKE” (neutilizat pe HV) a fost rezervat informal de David Mitchell pentru viitor
lucru pe vtables.

· Funcția „sv_catpvn_flags()” acceptă steaguri „SV_CATBYTES” și „SV_CATUTF8”, care
specificați dacă șirul adăugat este octeți sau, respectiv, UTF-8. (Aceste steaguri au
de fapt, sunt prezente din 5.16.0, dar anterior nu erau considerate ca parte a API.)

· A fost introdusă o nouă clasă opcode, „METHOP”. Conține informații utilizate la
runtime pentru a îmbunătăți performanța apelurilor de metodă clasă/obiect.

„OP_METHOD” și „OP_METHOD_NAMED” s-au schimbat de la „UNOP/SVOP” la
„METHOP”.

· „cv_name()” este o nouă funcție API care poate fi transmisă unui CV sau GV. Returnează un SV
care conține numele subrutinei, pentru utilizare în diagnosticare.

[perl #116735] [perl #116735]


· „cv_set_call_checker_flags()” este o nouă funcție API care funcționează ca
„cv_set_call_checker()”, cu excepția faptului că permite apelantului să specifice dacă apelul
verificatorul necesită un GV complet pentru raportarea numelui subrutinei sau dacă ar putea fi
a trecut un CV în schimb. Orice valoare este transmisă va fi acceptabilă pentru „cv_name()”.
„cv_set_call_checker()” garantează că va exista un GV, dar poate fi necesar să creeze unul
din mers, ceea ce este ineficient. [perl #116735]


· „CvGV” (care nu face parte din API) este acum o macrocomandă mai complexă, care poate numi un
functioneaza si reifica un GV. Pentru acele cazuri în care a fost folosit ca boolean,
S-a adăugat „CvHASGV”, care va reveni adevărat pentru CV-urile care au noțional GV-uri, dar
fără a reifica GV-ul. „CvGV” returnează și un GV acum pentru subs. lexical. [perl
#120441]

· Funcția „sync_locale” din perlapi a fost adăugată la API-ul public. Schimbarea
localitatea programului ar trebui evitată prin codul XS. Cu toate acestea, anumite non-Perl
bibliotecile apelate de la XS trebuie să facă acest lucru, cum ar fi „Gtk”. Când se întâmplă acest lucru, Perl are nevoie
să fie spus că localul s-a schimbat. Utilizați această funcție pentru a face acest lucru, înainte de a vă întoarce
la Perl.

· Definițiile și etichetele pentru steaguri din câmpul „op_private” al OP-urilor sunt acum automate
generate din date în regen/op_private. Efectul vizibil al acestui lucru este că unii
a ieșirii steagului „Concise” poate diferi ușor, iar ieșirea steagului a
„perl -Dx” poate diferi considerabil (amândoi folosesc acum același set de etichete). De asemenea,
build-urile de depanare au acum o nouă afirmație în „op_free()” pentru a se asigura că operațiunea nu
au setate semne nerecunoscute în „op_private”.

· Variabila depreciată „PL_sv_objcount” a fost eliminată.

· Perl încearcă acum să păstreze categoria locală „LC_NUMERIC” setată la „C”, cu excepția celor în jur
operațiunile care au nevoie să fie setate la locația de bază a programului. Aceasta protejează
numeroasele module XS care nu pot face față caracterului zecimal radix nefiind un punct.
Înainte de această lansare, Perl a inițializat această categorie la „C”, dar un apel la
„POSIX::setlocale()” l-ar schimba. Acum, un astfel de apel va schimba baza
locale din categoria „LC_NUMERIC” pentru program, dar localitatea expusă codului XS
va rămâne „C”. Există macrocomenzi noi pentru a manipula localitatea LC_NUMERIC, inclusiv
„STORE_LC_NUMERIC_SET_TO_NEEDED” și „STORE_LC_NUMERIC_FORCE_TO_UNDERLYING”. Vedea
„Funcții și macrocomenzi legate de localitate” în perlapi.

· A fost scrisă o nouă macrocomandă „isUTF8_CHAR” care determină eficient dacă șirul
dat de parametrii săi începe cu un caracter codificat UTF-8 bine format.

· Parametrul de context a fost eliminat pentru următoarele funcții private API:
„Perl_cast_ulong”, „Perl_cast_i32”, „Perl_cast_iv”, „Perl_cast_uv”,
„Perl_cv_const_sv”, „Perl_mg_find”, „Perl_mg_findext”, „Perl_mg_magical”,
„Perl_mini_mktime”, „Perl_my_dirfd”, „Perl_sv_backoff”, „Perl_utf8_hop”.

Rețineți că versiunile fără prefix ale acelor funcții care fac parte din API-ul public,
precum „cast_i32()”, rămân neafectate.

· Tipurile „PADNAME” și „PADNAMELIST” sunt acum tipuri separate și nu mai simplu
aliasuri pentru SV și AV. [perl #123223]
.

· Numele padurilor sunt acum întotdeauna UTF-8. Macrocomanda „PadnameUTF8” returnează întotdeauna adevărat.
Anterior, acesta a fost deja cazul, dar orice suport pentru două diferite
reprezentările interne ale numelor pad-urilor au fost acum eliminate.

· O nouă clasă operațională, „UNOP_AUX”, a fost adăugată. Aceasta este o subclasă a „UNOP” cu un
Câmpul „op_aux” a fost adăugat, care indică o serie de uniuni de UV, SV* etc. Este
destinat zonelor în care o operațiune trebuie să stocheze mai multe date decât un simplu „op_sv” sau orice altceva.
În prezent, singura operațiune de acest tip este „OP_MULTIDEREF” (vezi articolul următor).

· A fost adăugată o nouă operațiune, „OP_MULTIDEREF”, care realizează una sau mai multe matrice imbricate și
căutări hash în care cheia este o variabilă constantă sau simplă. De exemplu cel
expresia $a[0]{$k}[$i], care implica anterior zece „rv2Xv”, „Xelem”, „gvsv” și
operațiunile „const” sunt acum efectuate de o singură operațiune „multideref”. Poate gestiona, de asemenea, „local”,
„există” și „șterge”. O expresie index non-simplu, cum ar fi „[$i+1]” este încă făcută
folosind "aelem"/"helem", și căutarea matricei pe un singur nivel cu un index constant mic este
încă gata folosind „aelemfast”.

Selectate Bug Corecții


· „închidere” setează acum $!

Când apare o eroare I/O, faptul că a existat o eroare este înregistrat în
mâner. „close” returnează false pentru un astfel de mâner. Anterior, valoarea de $! ar
să nu fie atins de „închidere”, deci convenția comună de a scrie „închide $fh sau mor $!” făcut
nu funcționează fiabil. Acum, mânerul înregistrează și valoarea lui $!, iar „închidere” restaurează
aceasta.

· „no re” acum poate dezactiva tot ceea ce permite „utilizare re”.

Anterior, rularea „no re” dezactiva doar câteva lucruri. Acum poate opri totul
lucrurile activate. De exemplu, singura modalitate de a opri depanarea, odată activată, a fost să
ieșire din blocul de închidere; asta acum este reparat.

· „pack("D", $x)" și "pack("F", $x)" acum zero padding-ul pe build-urile duble lungi x86.
Sub unele opțiuni de compilare pe GCC 4.8 și mai târziu, acestea obișnuiau fie să suprascrie zero-
umplutură inițializată sau ocoliți în întregime bufferul inițializat. Aceasta a cauzat op/pack.t
a esua. [perl #123971]

· Extinderea unui tablou clonat dintr-un fir părinte ar putea duce la „Modificarea unui
„Valoarea de numai citire încercată” erori când se încearcă modificarea noilor elemente. [perl
#124127]

· O eroare a afirmației și blocarea ulterioară cu „*x= " a fost remediat. [perl
#123790]

· A fost remediată o posibilă eroare de blocare/buclă legată de compilarea sub-urilor lexicale.
[perl #124099]

· UTF-8 funcționează acum corect în numele funcțiilor, în terminatoarele de documente AICI necotate,
și în nume de variabile utilizate ca indici de matrice. [perl #124113]


· Potrivirile de modele globale repetate în context scalar pe șiruri mari contaminate au fost
lent exponențial, în funcție de poziția curentă de potrivire din șir. [perl
#123202]

· Au fost remediate diverse blocări din cauza confuziei parserului din cauza erorilor de sintaxă.
[perl #123801] [perl #123801]
[perl #123802]
[perl #123955]


· „split” în domeniul lexical $_ a fost fixat pentru a nu eșua afirmațiile. [perl
#123763]

· Sintaxa „my $x : attr” din diverși operatori de listă nu mai eșuează aserțiunile. [perl
#123817]

· Un semn „@” între ghilimele urmat de o cifră non-ASCII (care nu este un identificator valid)
ar provoca blocarea parserului, în loc să încerce pur și simplu „@” ca literal. Acest
a fost fixat. [perl #123963]

· „*bar::=*foo::=*glob_with_hash” se prăbușește din Perl 5.14, dar nu mai are.
[perl #123847]

· „foreach” în context scalar nu împingea un articol pe stivă, rezultând
gandaci. ("print 4, scalar do { foreach(@x){} } + 1" ar tipări 5.) A fost remediat
a returna „undef”. [perl #124004]

· Câteva cazuri de date utilizate pentru a stoca conținutul variabilelor de mediu în codul de bază C fiind
potenţial suprascrise înainte de a fi utilizate au fost remediate. [perl #123748]


· Unele modele care încep cu „/.*..../" potrivite cu șirurile lungi au fost lente
începând cu v5.8 și o parte din forma „/.*..../i" au fost lenți de la v5.18. Acum sunt
totul repede din nou. [perl #123743] .

· Valoarea vizibilă inițială a lui $/ este acum păstrată atunci când este setată la o valoare nevalidă.
Anterior, dacă setați $/ la o referință la o matrice, de exemplu, perl ar produce a
eroare de rulare și nu setați „PL_rs”, dar codul Perl care a verificat $/ ar vedea matricea
referinţă. [perl #123218] .

· Într-un model de expresie regulată, o clasă POSIX, cum ar fi „[:ascii:]”, trebuie să fie în interiorul a
clasă de caractere între paranteze, cum ar fi „qr/[[:ascii:]]/”. Se emite un avertisment atunci când ceva
care arată ca o clasă POSIX nu se află într-o clasă între paranteze. Acest avertisment nu a fost
a fost generată atunci când clasa POSIX a fost anulată: „[:^ascii:]”. Acest lucru este acum rezolvat.

· Perl 5.14.0 a introdus o eroare prin care „eval { LABEL: }” s-ar bloca. Asta a fost
fix. [perl #123652] .

· Au fost remediate diverse blocări din cauza confuziei parserului din cauza erorilor de sintaxă.
[perl #123617] . [perl #123617]
. [perl #123737]
. [perl #123753]
.

· Cod precum „/$a[/” folosit pentru a citi următoarea linie de intrare și pentru a o trata ca și cum ar fi venit
imediat după suportul de deschidere. În consecință, un cod invalid ar analiza și
rulați, dar un cod a provocat blocări, așa că acest lucru este acum interzis. [perl #123712]
.

· Remediați argumentul underflow pentru „pachet”. [perl #123874]
.

· Remediați gestionarea non-strict „\x{}”. Acum „\x{}” este echivalent cu „\x{0}” în loc de
culpabil.

· „stat -t” nu mai este acum tratat ca stivuitor, la fel ca „-t stat”. [perl #123816]
.

· Următoarele nu mai provoacă un SEGV: „qr{x+(y(?0))*}”.

· S-a rezolvat bucla infinită în analizarea backref-urilor în modelele regexp.

· Câteva remedieri minore de erori în comportamentul Infinity și NaN, inclusiv avertismente când
stringificarea șirurilor de tip Infinity sau NaN. De exemplu, „NaNcy” nu se numește la
NaN mai.

· O eroare în modelele de expresie regulată care ar putea duce la erori de segment și alte blocări
a fost fixat. Acest lucru s-a întâmplat numai în modelele compilate cu „/i” în timpul luării în
contează localitatea POSIX curentă (ceea ce înseamnă, de obicei, că trebuie compilate în
domeniul de aplicare al „use locale”) și trebuie să existe un șir de cel puțin 128 consecutiv
octeți pentru a se potrivi. [perl #123539] .

· „s///g” funcționează acum pe șiruri foarte lungi (unde sunt mai mult de 2 miliarde
iterații) în loc să moară cu „bucla de substituție”. [perl #103260]
. [perl #103260]
.

· „gmtime” nu se mai blochează cu valori care nu sunt un număr. [perl #123495]
.

· „\()” (o referință la o listă goală) și „y///” cu $_ lexical în domeniu, ar putea ambele
faceți o scriere proastă după sfârșitul stivei. Ambele au fost reparate pentru a extinde
stive mai întâi.

· „prototype()” fără argumente folosite pentru a citi articolul anterior din stivă, deci
„printează „foo”, prototype()” ar tipări prototipul lui foo. S-a remediat pentru a deduce $_
in schimb. [perl #123514] .

· Unele cazuri de sub-state lexicale declarate în interiorul sub-declarate predeclarate s-ar putea prăbuși, pentru
exemplu atunci când evalați un șir care include numele unei variabile exterioare, dar nu mai
face.

· Unele cazuri de sub-sări lexicale imbricate în interiorul sub-urilor anonime ar putea cauza „Bizar
erori de copiere sau chiar blocări.

· Când încearcă să emită avertismente, depanatorul implicit al lui Perl (perl5db.pl) a fost uneori
oferind în schimb „subrutină nedefinită &DB::db_warn apelată”. Acest bug, care a început să
apar în Perl 5.18, a fost remediat. [perl #123553]
.

· Anumite erori de sintaxă în substituții, cum ar fi „s/${<>{})//”, s-ar prăbuși și au avut
făcut acest lucru din Perl 5.10. (În unele cazuri, accidentul nu a început să aibă loc până în 5.16.)
Desigur, accidentul a fost remediat. [perl #123542]
.

· Remediați câteva depășiri de calcul a mărimii șirului; în special, o repetare
expresie precum „33 x ~3” ar putea cauza o depășire mare a tamponului de la noua ieșire
dimensiunea bufferului nu a fost gestionată corect de „SvGROW()”. O expresie ca asta acum
produce în mod corespunzător o panică de împachetare a memoriei. [perl #123554]
.

· "formline ("@...", "a");" s-ar prăbuși. Cazul „FF_CHECKNL” din „pp_formline()” nu a făcut-o
setați indicatorul folosit pentru a marca poziția de tăiere, ceea ce a condus la cazul „FF_MORE”.
prăbușirea cu o eroare de segmentare. Acest lucru a fost rezolvat. [perl #123538]
.

· O posibilă depășire și blocare a memoriei tampon la analizarea unui model literal în timpul obișnuit
compilarea expresiilor a fost remediată. [perl #123604]
.

· „fchmod()” și „futimes()” acum setează $! atunci când eșuează din cauza trecerii unui dosar închis
mâner. [perl #122703] .

· „op_free()” și „scalarvoid()” nu se mai blochează din cauza depășirii stivei la eliberarea unui
arborele operativ profund recursiv. [perl #108276]
.

· În Perl 5.20.0, $^N a avut din greșeală steagul UTF-8 dezactivat dacă a fost accesat
dintr-un bloc de cod într-o expresie regulată, codând efectiv valoarea UTF-8.
Acest lucru a fost reparat. [perl #123135]
.

· Un apel „semctl” eșuat nu mai suprascrie elementele existente pe stivă, ceea ce înseamnă
că „(semctl(-1,0,0,0))[0]” nu mai dă un avertisment „neinițializat”.

· „else{foo()}” fără spațiu înainte de „foo” este acum mai bine la alocarea liniei corecte
număr la acea declarație. [perl #122695]
.

· Uneori, atribuirea din „@array = split” este optimizată astfel încât „split” în sine
scrie direct în matrice. Acest lucru a provocat o eroare, împiedicând această atribuire
fiind utilizat în context lvalue. Deci „(@a=split//,”foo”)=bar()” a fost o eroare. (Acest bug
probabil că se întoarce la Perl 3, când a fost adăugată optimizarea.) Acum a fost remediat.
[perl #123057] .

· Când o listă de argumente eșuează verificările specificate de o semnătură de subrutină (care este
încă o caracteristică experimentală), mesajele de eroare rezultate dau acum fișierul și
numărul de linie al apelantului, nu al subrutinei apelate. [perl #121374]
.

· Operatorii flip-flop (".." și "..." în context scalar) folosit pentru a menține un separat
stare pentru fiecare nivel de recursivitate (de câte ori a fost apelat sub-ul inclus
recursiv), contrar documentației. Acum fiecare închidere are o stare internă
pentru fiecare flip-flop. [perl #122829]
.

· Operatorul flip-flop ("".." în context scalar) ar returna același scalar fiecare
timp, cu excepția cazului în care subrutina care o conține a fost apelată recursiv. Acum se întoarce mereu
un nou scalar. [perl #122829] .

· „utilizare”, „nu”, etichetele declarațiilor, blocurile speciale (“BEGIN”) și pod sunt acum permise ca
primul lucru dintr-un bloc „hartă” sau „grep”, blocul după „printare” sau „spune” (sau alte
funcții) returnând un mâner și în „${...}”, „@{...}”, etc. [perl #122782]
.

· Operatorul de repetiție „x” propagă acum contextul lvalue la argumentul său din stânga
atunci când este folosit în contexte precum „foreach”. Aceasta permite „pentru(($#that_array)x2) { ... }” să
funcționează așa cum era de așteptat dacă bucla modifică $_.

· „(...) x ...” în context scalar folosit pentru a corupe stiva dacă un operand a fost un obiect
cu supraîncărcare „x”, provocând un comportament neregulat. [perl #121827]
.

· Atribuirea unui scalar lexical este adesea optimizată; de exemplu în „my $x; $x = $y
+ $z", operatorul de atribuire este optimizat și operatorul de adăugare își scrie rezultatul
direct la $x. Au fost remediate diverse erori legate de această optimizare. Anumit
operatorii din partea dreaptă uneori nu reușesc să atribuie valoarea sau
atribuiți o valoare greșită sau ar apela STORE de două ori sau deloc pe variabilele legate.
Operatorii afectați au fost „$foo++”, „$foo--” și „-$foo” sub „use integer”,
„chomp”, „chr” și „setpgrp”.

· Atribuțiile de listă erau uneori greșite dacă același scalar ajungea pe ambele părți ale
atribuire datorită utilizării „legate”, „valori” sau „fiecare”. Rezultatul ar fi greșit
valoarea fiind atribuită.

· „setpgrp($nonzero)” (cu un argument) a fost modificat accidental în 5.16 pentru a însemna
setpgrp(0). Acest lucru a fost rezolvat.

· „__SUB__” ar putea returna o valoare greșită sau chiar poate deteriora memoria sub depanator (
comutator „-d”) și în sub-urile care conțin „eval $șir”.

· Când „sub () { $var }” devine inlineabil, acum returnează un scalar diferit de fiecare dată,
la fel cum ar face un sub-inlineabil, deși Perl încă optimizează copia departe în cazuri
unde nu ar face nicio diferență observabilă.

· „my sub f () { $var }” și „sub () : attr { $var }” nu mai sunt eligibile pentru
inliniere. Primul s-ar prăbuși; acesta din urmă ar arunca doar atributele.
Se face o excepție pentru atributul puțin cunoscut „:method”, care nu face nimic
mult.

· Alinierea sub-urilor cu un prototip gol este acum mai consistentă decât înainte.
Anterior, un sub cu mai multe instrucțiuni, dintre care toate, cu excepția ultimelor, au fost optimizate
departe, ar fi inlineable numai dacă ar fi un sub anonim care conține un șir „eval”
sau declarație „state” sau închidere peste o variabilă lexicală exterioară (sau orice sub
sub depanator). Acum orice sub care este pliat la o singură constantă după
declarațiile au fost optimizate departe este eligibil pentru inline. Acest lucru se aplică lucrurilor
ca „sub () { jabber () dacă DEBUG; 42 }”.

Unele subrutine cu o „întoarcere” explicită au fost făcute inlineabile, spre deosebire de
documentație, Acum „întoarcerea” împiedică întotdeauna introducerea în linie.

· Pe unele sisteme, cum ar fi VMS, „cripta” poate returna un șir non-ASCII. Dacă un scalar
atribuit la a conținut anterior un șir UTF-8, atunci „cripta” nu s-ar dezactiva
flag-ul UTF-8, corupând astfel valoarea returnată. Asta s-ar întâmpla cu
„$lexical = criptă ...”.

· „cripta” nu mai apelează „FETCH” de două ori pe un prim argument legat.

· Un aici-doc neterminat pe ultima linie a unui operator sub formă de ghilimele ("qq[${ <
„/(?{ <

· „index()” și „rindex()” nu se mai blochează atunci când sunt folosite pe șiruri de caractere de peste 2 GB. [perl
#121562] .

· O mică scurgere de memorie, intenționată anterior, în „PERL_SYS_INIT”/„PERL_SYS_INIT3” pe
Compilările Win32 au fost remediate. Acest lucru ar putea afecta încorporatorii care creează și distrug în mod repetat
motoarele perl în cadrul aceluiași proces.

· „POSIX::localeconv()” returnează acum datele pentru localitatea de bază a programului chiar
atunci când este apelat din afara domeniului de aplicare a „use locale”.

· „POSIX::localeconv()” funcționează acum corect pe platformele care nu au „LC_NUMERIC”
și/sau „LC_MONETARY”, sau pentru care Perl a fost compilat pentru a ignora unul sau ambele
dintre aceste categorii locale. În astfel de circumstanțe, acum nu există intrări pentru
valorile corespunzătoare din hashul returnat de „localeconv()”.

· „POSIX::localeconv()” marchează acum în mod corespunzător valorile pe care le returnează ca UTF-8 sau nu.
Anterior, erau întotdeauna returnate ca octeți, chiar dacă ar fi trebuit să fie
codificat ca UTF-8.

· Pe Microsoft Windows, în domeniul de aplicare a „use locale”, următorul caracter POSIX
clasele au dat rezultate pentru multe locații care nu erau conforme cu standardul POSIX:
„[[:alnum:]]”, „[[:alpha:]]”, „[[:blank:]]”, „[[:digit:]]”, „[[:graph:]]”,
„[[:lower:]]”, „[[:print:]]”, „[[:punct:]]”, „[[:upper:]]”, „[[:word:]]”, „[[:word:]]”, și
„[[:xdigit:]]”. Acest lucru se datorează faptului că implementarea Microsoft de bază nu
urmați standardul. Perl ia acum precauții speciale pentru a corecta acest lucru.

· Multe probleme au fost detectate de Coverityhttp://www.coverity.com/> si fix.

· „system()” și prietenii ar trebui să funcționeze acum corect pe mai multe versiuni Android.

Din cauza unei neglijeri, valoarea specificată prin „-Dtargetsh” la Configurare s-ar sfârși
fiind ignorat de o parte din procesul de construire. Acest lucru a cauzat perls compilat încrucișat pentru
Android va ajunge cu versiuni defecte ale „system()”, „exec()” și backtick-uri:
comenzile ar ajunge să caute "/ Bin / sh" în loc de "/system/bin/sh", și așa ar fi
eșuează pentru marea majoritate a dispozitivelor, lăsând $! ca „ENOENT”.

· „qr(...\(...\)...)”, „qr[...\[...\]...]” și „qr{...\{.. .\}...}" acum lucreaza.
Anterior, era imposibil să scapi de aceste trei personaje din stânga cu o bară oblică inversă
într-un model de expresie regulată, în cazul în care altfel ar fi luate în considerare
metacaracterele, iar delimitatorul de deschidere a modelului era caracterul și închiderea
delimitatorul era caracterul său oglindă.

· „s///e” pe șirurile UTF-8 contaminate „pos()” corupt. Acest bug, introdus în 5.20, este
acum fixat. [perl #122148] .

· O limită non-cuvânt într-o expresie regulată ("\B") nu se potrivea întotdeauna cu sfârșitul
şir; în special „q{} =~ /\B/” nu s-a potrivit. Acest bug, introdus în perl 5.14,
este acum fix. [perl #122090] .

· „„ P” =~ /(?=.*P)P/” ar trebui să se potrivească, dar nu. Acest lucru este acum rezolvat. [perl #122171]
.

· Eșecul de a compila „utilizați Foo” într-un „eval” ar putea lăsa o subrutină falsă „BEGIN”
definiție, care ar produce un avertisment „Subroutine BEGIN redefinit” la următoarea utilizare
de „utilizare” sau alt bloc „BEGIN”. [perl #122107]
.

· Sintaxa „metoda { BLOCK } ARGS” acum analizează corect argumentele dacă încep cu
o bretele de deschidere. [perl #46947] .

· Bibliotecile externe și Perl pot avea idei diferite despre ce este localitatea. Aceasta este
problematică la analizarea șirurilor de versiuni dacă separatorul numeric al localității a fost
schimbat. Analizarea versiunilor a fost corectată pentru a se asigura că gestionează corect localurile.
[perl #121930] .

· A fost remediată o eroare în cazul în care afirmațiile de lungime zero și blocurile de cod în interiorul unei expresii regex
ar putea face ca „pos” să vadă o valoare incorectă. [perl #122460]
.

· Dereferentarea constantelor funcționează acum corect pentru constantele typeglob. Anterior
globul a fost stringificat și numele său a fost privit în sus. Acum este folosit globul în sine. [perl
#69456]

· Când se analizează un simbol ("$" "@" "%" "&)" urmat de acolade, analizatorul nu mai încearcă
pentru a ghici dacă este un bloc sau un constructor hash (care provoacă o eroare de sintaxă atunci când acesta
ghicește pe acesta din urmă), deoarece nu poate fi decât un bloc.

· „undef $reference” eliberează acum referentul imediat, în loc să se agațe de el
până la următoarea declarație. [perl #122556]


· Diverse cazuri în care este folosit numele unui subordonat (încărcare automată, supraîncărcare, mesaje de eroare)
folosit pentru blocarea subsecțiilor lexicale, dar au fost remediate.

· Căutarea Bareword acum încearcă să evite pachetele însuflețitoare dacă se dovedește că bareword este
nu va fi un nume de subrutină.

· Compilarea constantelor anonime (de exemplu, „sub () { 3 }”) nu mai șterge niciunul
subrutină numită „__ANON__” în pachetul curent. Nu numai că „*__ANON__{CODE}” a fost
a fost șters, dar a existat și o scurgere de memorie. Această eroare se întoarce la Perl 5.8.0.

· Declarații stub precum „sub f;” și „sub f ();” nu mai șterge constantele
același nume declarat de „utilizare constantă”. Acest bug a fost introdus în Perl 5.10.0.

· „qr/[\N{secvența denumită}]/” funcționează acum corect în multe cazuri.

Unele nume cunoscute de „\N{...}” se referă la o secvență de mai multe caractere, în loc de
caracterul unic obișnuit. Clasele de caractere între paranteze, în general, se potrivesc doar cu o singură
caractere, dar acum a fost adăugată o manipulare specială, astfel încât acestea să se potrivească cu numele
secvențe, dar nu dacă clasa este inversată sau secvența este specificată ca
începutul sau sfârșitul unui interval. În aceste cazuri, singura schimbare de comportament de înainte este
o ușoară reformulare a mesajului de eroare fatal dat atunci când această clasă face parte din a
„?[...])” construct. Când „[...]” rămâne singur, același avertisment non-fatal ca
înainte este ridicat și numai primul caracter din secvență este folosit, din nou la fel ca
înainte.

· Constantele contaminate evaluate în timpul compilării nu mai provoacă declarații fără legătură
devin contaminat. [perl #122669]

· „open $$fh, ...”, care învie un mâner cu un nume precum „main::_GEN_0”, nu a fost
oferind mânerului numărul de referințe corect, astfel încât s-ar putea întâmpla o dublă liberă.

· Când decide că un cuvânt nu este un nume de metodă, analizatorul ar fi confuz dacă un
„nostru” sub-ul cu același nume a existat și căutați metoda în pachetul
sub "nostru", în loc de pachetul invocatorului.

· Analizatorul nu mai este confundat de „\U=" într-un șir dublu ghilimele. Obisnuia
produce o eroare de sintaxă, dar acum o compilează corect. [perl #80368]


· A fost întotdeauna intenția ca operatorii de testare a fișierelor „-B” și „-T” să trateze
Fișierele codificate UTF-8 ca text. (perlfunc a fost actualizat pentru a spune asta.) Anterior, it
a fost posibil ca unele fișiere să fie considerate UTF-8 care de fapt nu erau UTF-8 valide.
Acest lucru este acum rezolvat. Operatorii lucrează acum și pe platformele EBCDIC.

· În anumite condiții, mesajele de avertizare apar în timpul modelului de expresie regulată
compilarea au fost scoase de mai multe ori. Acest lucru a fost rezolvat acum.

· Perl 5.20.0 a introdus o regresie în care o expresie regulată codificată UTF-8
modelul care conține o singură literă mică ASCII nu se potrivea cu majusculă
echivalent. Acest lucru a fost remediat atât în ​​5.20.1, cât și în 5.22.0. [perl #122655]


· Plierea constantă ar putea suprima incorect avertismentele dacă avertismentele lexicale („utilizați
avertismente" sau "fără avertismente") nu erau în vigoare și $^W erau false la momentul compilării și
adevărat în timpul rulării.

· Încărcarea tabelelor Unicode în timpul unei potriviri a expresiei regulate poate provoca afirmații
eșecuri în construcțiile de depanare dacă potrivirea anterioară a folosit același obișnuit
expresie. [perl #122747]

· Clonarea firelor de execuție obișnuia să funcționeze incorect pentru sub-urile lexicale, care ar putea cauza blocări sau
duble libere la ieșire.

· Începând cu Perl 5.14.0, ștergerea $SomePackage::{__ANON__} și apoi nedefinirea unui anonim
subrutina ar putea corupe lucrurile în interior, ducând la prăbușirea Devel::Peek sau B.pm
oferind date fără sens. Acest lucru a fost rezolvat.

· „(apelant $n)[3]” raportează acum numele de subs lexicale, în loc să le trateze ca
"(necunoscut)".

· „sort subname LIST” acceptă acum utilizarea unui sub lexical ca rutină de comparare.

· Alianta (de exemplu, prin „*x = *y”) ar putea confunda sarcinile de listă care le menționează pe cele două
nume pentru aceeași variabilă de ambele părți, determinând alocarea unor valori greșite.
[perl #15667]

· Terminatoarele lungi aici-doc ar putea cauza o citire proastă pe linii scurte de intrare. Aceasta are
fost fixat. Este îndoielnic că ar fi putut avea loc vreun accident. Acest bug se întoarce la
când aici-docs au fost introduse în Perl 3.000 acum douăzeci și cinci de ani.

· O optimizare în „split” pentru a trata „split /^/” ca „split /^/m” a avut nefericitul
efect secundar de a trata și „split /\A/” ca „split /^/m”, ceea ce nu ar trebui.
Acest lucru a fost rezolvat. (Rețineți, totuși, că „split /^x/” nu se comportă ca
„split /^x/m”, care este, de asemenea, considerat a fi un bug și va fi remediat în viitor
versiune.) [perl #122761]

· Sintaxa „my Class $var” puțin cunoscută (vezi câmpurile și atributele) ar putea deveni confuză
în domeniul de aplicare a „utilizați utf8” dacă „Clasa” ar fi o constantă a cărei valoare conținea Latin-1
caractere.

· Blocarea și deblocarea valorilor prin Hash::Util sau „Internals::SvREADONLY” nu mai are
orice efect asupra valorilor care au fost doar pentru citire pentru început. Anterior, deblocarea astfel de
valorile pot duce la blocări, blocări sau alt comportament neregulat.

· Unele constructe „(?(...)...)” neterminate din expresiile regulate s-ar prăbuși
sau dați mesaje de eroare eronate. „/(?(1)/” este un astfel de exemplu.

· „pachet „w”, $tied” nu mai apelează FETCH de două ori.

· Atribuțiile de listă precum „($x, $z) = (1, $y)” funcționează acum corect dacă $x și $y au fost
alias de „foreach”.

· Unele modele, inclusiv blocuri de cod cu erori de sintaxă, cum ar fi „/ (?{(^{})/”, ar
aserțiuni suspendate sau eșuate pe versiunile de depanare. Acum produc erori.

· A fost remediat un eșec de afirmare la analizarea „sortării” cu depanarea activată. [perl
#122771] .

· „*a = *b; @a = split //, $b[1]” ar putea face o citire proastă și poate produce rezultate nedorite.

· În „() = @array = split”, „() =" de la început nu mai încurcă optimizatorul
pentru a presupune o limită de 1.

· Avertismentele fatale nu mai împiedică apariția erorilor de sintaxă. [perl #122966]
.

· S-a remediat o eroare de conversie NaN dublu-la-lung-dublă pe VMS. Pentru NaN silențioase (și numai pe
A fost produs itaniu, nu Alpha) infinit negativ în loc de NaN.

· S-a rezolvat problema care a cauzat ca „make distclean” să lase incorect unele fișiere în urmă.
[perl #122820] .

· AIX setează acum corect lungimea în „getsockopt”. [perl #120835]
. [cpan #120835]
. [cpan #91183]
.

· Faza de optimizare a unei compilații regexp ar putea rula „pentru totdeauna” și epuizează totul
memorie în anumite circumstanțe; acum fixat. [perl #122283]
.

· Scriptul de testare t/op/crypt.t acum folosește algoritmul SHA-256 dacă este cel implicit
cu dizabilități, mai degrabă decât să dea eșecuri. [perl #121591]
.

· S-a remediat o eroare off-by-one la setarea dimensiunii unei matrice partajate. [perl #122950]
.

· S-a remediat o eroare care ar putea determina perl să intre într-o buclă infinită în timpul compilării. În
în special, a în timp ce(1) într-o sublistă, de exemplu

sub foo { () = ($a, my $b, ($c, do { în timp ce(1) {} })) }

Bug-ul a fost introdus în 5.20.0 [perl #122995]
.

· Pe Win32, dacă o variabilă a fost „localizată” într-un pseudo-proces care s-a bifurcat ulterior,
restabilirea valorii originale în pseudo-procesul copil a cauzat coruperea memoriei și
o blocare a pseudo-procesului copil (și, prin urmare, a procesului OS). [perl #40565]
.

· Apelarea „write” pe un format cu un câmp „^**” poate produce o panică în „sv_chop()” dacă
au existat argumente insuficiente sau dacă variabila folosită pentru a completa câmpul era goală.
[perl #123245] .

· Subnumele lexicale non-ASCII apar acum fără nedorit atunci când apar din eroare
mesaje.

· Prototipul subrutinei „\@” nu mai aplatizează matricele între paranteze (luând un
referință la fiecare element), dar ia o referință la matricea în sine. [perl #47363]
.

· Un bloc care nu conține nimic în afară de o buclă „for” în stil C ar putea deteriora stiva,
determinând ca listele din afara blocului să piardă elemente sau să aibă elemente suprascrise. Acest
s-ar putea întâmpla cu „map { for(...){...} } ...” și cu liste care conțin „do {
pentru (...){...} }". [perl #123286] .

· „scalar()” propagă acum contextul lvalue, astfel încât „for(scalar($#foo)) { ... }” poate
modifica $#foo prin $_.

· „qr/@array(?{block})/” nu mai moare cu „Copie bizare a ARRAY”. [perl #123344]
.

· „eval '$variable'” în subrutinele cu nume imbricate ar căuta uneori o globală
variabilă chiar și cu o variabilă lexicală în domeniu.

· În perl 5.20.0, „sort CORE::fake” unde „fals” este altceva decât un cuvânt cheie,
a început să taie ultimele 6 caractere și să trateze rezultatul ca pe un subnume de sortare.
Comportamentul anterior de tratare a „CORE::fake” ca sub nume de sortare a fost restabilit.
[perl #123410] .

· În afara „utilizați utf8”, o variabilă lexicală Latin-1 cu un singur caracter este interzisă. The
mesajul de eroare pentru acesta, „Nu se poate folosi global $foo...”, dădea gunoi în loc de
numele variabilei.

· „readline” pe un handle inexistent a provocat ca „${^LAST_FH}” să producă o referință la
un scalar nedefinit (sau eșuează o afirmație). Acum „${^LAST_FH}” ajunge nedefinit.

· „(...) x ...” în context void acum aplică context scalar argumentului din stânga,
în loc de contextul în care a fost apelat actualul sub. [perl #123020]
.

Cunoscut Probleme


· „împachetarea” unui NaN pe un perl compilat cu Visual C 6 nu se comportă corect, ceea ce duce
la un eșec al testului în t/op/infnan.t. [perl 125203]


· Un obiectiv este ca Perl să poată fi recompilat pentru a funcționa destul de bine pe orice Unicode
versiune. În Perl 5.22, totuși, cea mai veche astfel de versiune este Unicode 5.1 (actuala este
7.0).

· Platforme EBCDIC

· Operatorii „cmp” (și prin urmare „sortare”) nu dau neapărat rezultatele corecte
când ambii operanzi sunt șiruri codificate UTF-EBCDIC și există un amestec de ASCII
și/sau personaje de control, împreună cu alte personaje.

· Intervalele care conțin „\N{...}” în operatorii de transliterare „tr///” (și „y///”)
sunt tratate diferit de intervalele echivalente din modelele de expresie regulată.
Acestea ar trebui, dar nu fac, ca toate valorile din intervale să fie tratate ca
Puncte de cod Unicode, și nu cele native. („Versiunea 8 Expresii regulate” în
perlre oferă detalii despre cum ar trebui să funcționeze.)

· Codificarea și codificarea sunt în mare parte rupte.

· Multe module CPAN care sunt livrate cu core arată teste eșuate.

· Este posibil ca „ambalați”/„dezpachetați” cu formatul „U0” să nu funcționeze corect.

· Se știe că următoarele module au eșecuri de testare cu această versiune de Perl. În
multe cazuri, patch-uri au fost trimise, așa că sperăm că vor exista noi versiuni în curând:

· B::Generați versiunea 1.50

· B::Utils versiunea 0.25

· Coro versiunea 6.42

· Versiunea Dancer 1.3130

· Data::Alias ​​versiunea 1.18

· Data::Dump::Streamer versiunea 2.38

· Date::Util versiune 0.63

· Devel::Spy versiunea 0.07

· versiunea invocator 0.34

· Lexical::Var versiunea 0.009

· LWP::ConsoleLogger versiunea 0.000018

· Mason versiunea 2.22

· NgxQueue versiunea 0.02

· Padre versiunea 1.00

· Parse::Keyword 0.08

Necrolog


Brian McCauley a murit pe 8 mai 2015. A fost un afiș frecvent pentru Usenet, Perl Monks și
alte forumuri Perl și a făcut mai multe contribuții CPAN sub porecla NOBULL, inclusiv la
Întrebările frecvente Perl. A participat la aproape fiecare YAPC::Europa și, într-adevăr, a ajutat la organizare
YAPC::Europe 2006 și QA Hackathon 2009. Înțelepciunea și încântarea lui în sistemele complicate
erau deosebit de evidente în dragostea lui pentru jocurile de societate; mulţi negustori de Perl vor avea plăcere
amintiri despre jocul Fluxx și alte jocuri cu Brian. El va fi dor de el.

Mulţumiri


Perl 5.22.0 reprezintă aproximativ 12 luni de dezvoltare de la Perl 5.20.0 și
conține aproximativ 590,000 de linii de modificări în 2,400 de fișiere de la 94 autori.

Excluzând fișierele generate automat, documentația și instrumentele de lansare, au existat aproximativ
370,000 de linii de modificări la fișierele 1,500 .pm, .t, .c și .h.

Perl continuă să înflorească în al treilea deceniu datorită unei comunități vibrante de utilizatori
și dezvoltatori. Se știe că următoarele persoane au contribuit la îmbunătățirile care
a devenit Perl 5.22.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Alberto Simo~es, Alex Solovey, Alex Vandiver,
Alexandr Ciornii, Alexandre (Midnite) Jousset, Andreas Koenig, Andreas Voegele, Andrew
Fresh, Andy Dougherty, Anthony Heading, Aristotel Pagaltzis, brian d foy, Brian Fraser,
Chad Granum, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsaaker, Daniel
Dragan, Darin McBride, Dave Rolsky, David Golden, David Mitchell, David Wheeler, Dmitri
Tikhonov, Doug Bell, E. Choroba, Ed J, Eric Herman, Părintele Chrysostomos, George Greer,
Glenn D. Golden, Graham Knop, H.Merijn Brand, Herbert Breunung, Hugo van der Sanden, James
E Keenan, James McCoy, James Raspass, Jan Dubois, Jarkko Hietaniemi, Jasmine Ngan, Jerry
D. Hedden, Jim Cromie, John Goodyear, kafka, Karen Etheridge, Karl Williamson, Kent
Fredric, kmx, Lajos Veres, Leon Timmermans, Lukas Mai, Mathieu Arnold, Matthew Horsfall,
Max Maischein, Michael Bunk, Nicholas Clark, Niels Thykier, Niko Tyni, Norman Koch,
Olivier Mengue, Peter John Acklam, Peter Martini, Petr PisaX, Philippe Bruhat (BooK),
Pierre Bogossian, Rafael Garcia-Suarez, Randy Stauner, Reini Urban, Ricardo Signes, Rob
Hoelz, Rostislav Skudnov, Sawyer X, Shirakata Kentaro, Shlomi Fish, Sisyphus, Slaven
Rezic, Smylers, Steffen Mueller, Steve Hay, Sullivan Beck, syber, Tadeusz SoXnierz, Thomas
Sibley, Todd Rinaldo, Tony Cook, Vincent Pit, Vladimir Marek, Yaroslav Kuzmin, Yves Orton,
AEvar Arnfjoer` Bjarmason.

Lista de mai sus este aproape sigur incompletă, deoarece este generată automat din
istoricul controlului versiunilor. În special, nu include numele celor (foarte mult
apreciați) colaboratorii care au raportat probleme la instrumentul de urmărire a erorilor Perl.

Multe dintre modificările incluse în această versiune au provenit din modulele CPAN incluse în
Miezul lui Perl. Suntem recunoscători întregii comunități CPAN pentru că a ajutat Perl să înflorească.

Pentru o listă mai completă a tuturor colaboratorilor istorici ai Perl, vă rugăm să consultați AUTORI
fișier în distribuția sursă Perl.

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 . Acolo
pot fi, de asemenea, informații lahttp://www.perl.org/>, pagina de pornire Perl.

Dacă credeți că aveți o eroare neraportată, vă rugăm să rulați programul perlbug 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 perlbug@perl.org pentru a fi
analizate de echipa de portare Perl.

Dacă eroarea pe care o raportați are implicații de securitate, ceea ce o face inadecvată
trimiteți la o listă de corespondență arhivată public, apoi trimiteți-o către
perl5-security-report@perl.org. Acest lucru indică o corespondență dezarhivată cu abonament închis
lista, care include toți comitetorii de bază, care vor putea ajuta la evaluarea impactului
probleme, găsiți o soluție și ajutați la coordonarea lansării de patch-uri pentru
atenuați sau remediați problema pe toate platformele pe care Perl este acceptat. Vă rog doar
utilizați această adresă pentru probleme de securitate din nucleul Perl, nu pentru module în mod independent
distribuite pe CPAN.

Utilizați perl5220delta online folosind serviciile onworks.net



Cele mai recente programe online Linux și Windows