EnglezăFrancezăSpaniolă

Favicon OnWorks

perl5200delta - Online în cloud

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

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


perl5200delta - ce este nou pentru perl v5.20.0

DESCRIERE


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

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

Nucleu Îmbunătățiri


Experimental Subrutină semnături
Sintaxă declarativă pentru a despacheta lista de argumente în variabile lexicale. "sub foo ($a,$b)
{...}" verifică numărul de argumente și pune argumentele în variabile lexicale.
Semnăturile nu sunt echivalente cu expresia existentă de „sub foo { my($a,$b) = @_; ... }”.
Semnăturile sunt disponibile numai prin activarea unei funcții care nu este implicită și generează avertismente
despre a fi experimental. Ciocnirea sintactică cu prototipurile este gestionată prin dezactivarea
sintaxă prototip scurtă atunci când semnăturile sunt activate.

Consultați „Semnături” în perlsub pentru detalii.

„sub”-uri acum lua a "prototip" atribut
Când declarați sau definiți un „sub”, prototipul poate fi acum specificat în interiorul unui
atributul „prototip” în loc de paranteze după nume.

De exemplu, „sub foo($$){}” ar putea fi rescris ca „sub foo : prototip($$){}”.

Mai Mult consistent prototip analizare
Punctele și virgulă multiple din prototipurile subrutinei au fost mult timp tolerate și tratate ca a
un singur punct și virgulă. A existat un caz în care acest lucru nu s-a întâmplat. O subrutină a cărei
prototipul începe cu „*” sau „;*” poate afecta dacă un cuvânt nu este considerat o metodă
nume sau apel secundar. Acest lucru se aplică acum și pentru „;;;*”.

Spațiile albe au fost de mult permise în interiorul prototipurilor de subrutine, deci „sub( $ $ )” este
echivalent cu „sub($$)”, dar până acum a fost eliminat atunci când subrutina a fost analizată.
Prin urmare, spațiul alb a fost nu permis în prototipurile stabilite de „Scalar::Util::set_prototype”. Acum
este permis, iar analizatorul nu mai elimină spațiile albe. Aceasta înseamnă „prototip
&mysub" returnează prototipul original, spații albe și tot.

"rand" acum utilizări a consistent aleator număr generator
Anterior, perl folosea un generator de numere aleatoare specifice platformei, variind între
libc rand(), Aleatoriu() or drand48().

Aceasta însemna că calitatea numerelor aleatoare ale lui Perl ar varia de la platformă la platformă,
din cei 15 biți de rand() pe Windows la 48 de biți pe platforme POSIX, cum ar fi Linux, cu
drand48().

Perl folosește acum propriul său intern drand48() implementare pe toate platformele. Asta nu
faceți „rand” lui perl sigur din punct de vedere criptografic. [perl #115928]

Nou felie sintaxă
Noua sintaxă %hash{...} și %array[...] returnează o listă de cheie/valoare (sau index/valoare)
perechi. Consultați „Feții hash cheie/valoare” în perldata.

Experimental remediere post Dereferențiere
Când funcția „postderef” este în vigoare, sunt setate următoarele echivalențe sintactice
sus:

$sref->$*; # la fel ca ${ $sref } # interpolează
$aref->@*; # la fel ca @{ $aref } # interpolează
$href->%*; # la fel ca %{ $href }
$cref->&*; # la fel ca &{ $cref }
$gref->**; # la fel ca *{ $gref }

$aref->$#*; # la fel ca $#{ $aref }

$gref->*{ $slot }; # la fel ca *{ $gref }{ $slot }

$aref->@[ ... ]; # la fel ca @$aref[ ... ] # interpolează
$href->@{ ... }; # la fel ca @$href{ ... } # interpolează
$aref->%[ ... ]; # la fel ca %$aref[ ... ]
$href->%{ ... }; # la fel ca %$href{ ... }

Cele marcate ca interpolând interpolează numai dacă caracteristica asociată „postderef_qq” este
de asemenea, activat. Această caracteristică este experimental și se va declanșa
„experimental::postderef” - avertismente de categorie atunci când sunt utilizate, cu excepția cazului în care sunt suprimate.

Pentru mai multe informații, consultați secțiunea Postfix Dereference Syntax din perlref.

Unicode 6.3 acum sprijinite
Perl acum acceptă și este livrat cu Unicode 6.3 (deși Perl poate fi recompilat cu orice
versiunea anterioară a Unicode, de asemenea). O listă detaliată a modificărilor Unicode 6.3 este la
<http://www.unicode.org/versions/Unicode6.3.0/>.

Nou „\p{Unicode}” regulat expresie model proprietate
Acesta este un sinonim pentru „\p{Orice}” și se potrivește cu setul de puncte de cod definite de Unicode 0 -
0x10FFFF.

Mai bine 64-bit a sustine
Pe platformele pe 64 de biți, funcțiile matricei interne utilizează acum decalaje pe 64 de biți, permițând Perl
matrice să conțină mai mult de 2**31 de elemente, dacă aveți memorie disponibilă.

Motorul de expresii regulate acceptă acum șiruri mai lungi de 2**31 de caractere. [perl
#112790, #116907]

Funcțiile PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt și PerlIO_set_ptrcnt acum
au SSize_t, mai degrabă decât int, returnează valori și parametri.

"utilizare local" acum fabrică on UTF-8 local
Până la această lansare, au fost acceptate doar localizări cu un singur octet, cum ar fi seria ISO 8859.
Acum, localurile UTF-8 multi-byte din ce în ce mai frecvente sunt de asemenea acceptate. O locație UTF-8
este unul în care setul de caractere este Unicode și codificarea este UTF-8. POSIX
Operațiuni din categoria „LC_CTYPE” (schimbarea majusculelor (cum ar fi „lc()”, „\U”) și caracter
clasificarea ("\w", "\D", "qr/[[:punct:]]/")) sub o astfel de localitate funcționează ca și cum nu
sub locale, dar în schimb ca în „utilizați caracteristica „unicode_strings””, cu excepția regulilor de pată
sunt urmate. Sortarea rămâne în ordinea punctelor de cod în această versiune. [perl #56820].

"utilizare local" acum Întocmește on sisteme fără localizare capacitate
Făcând acest lucru anterior, programul nu se compila. În sfera sa de aplicare programul
se comportă ca în localitatea „C”. Astfel, programele scrise pentru platforme care acceptă locale
poate rula pe platforme fără localizări fără modificări. Încercările de a schimba locația departe de
localitatea „C” va eșua, desigur.

Mai Mult localizare inițializare da înapoi Opțiuni
Dacă a apărut o eroare cu localurile în timpul pornirii Perl, acesta a renunțat imediat și a încercat
pentru a utiliza localitatea „C”. Acum încearcă mai întâi să folosească alte locații date de mediu
variabile, așa cum este detaliat în „MEDIUL” în perllocale. De exemplu, dacă „LC_ALL” și
„LANG” sunt ambele setate, iar utilizarea localului „LC_ALL” nu reușește, Perl va încerca acum „LANG”
locale și numai dacă aceasta nu reușește, va reveni la „C”. Pe mașinile Windows, Perl va
încercați, înainte de a utiliza „C”, localul implicit al sistemului dacă toate localurile date de mediu
variabilele eșuează.

"-DL" Runtime opțiune acum adăugat pentru calc localizare instalare
Acesta este proiectat pentru dezvoltatorii de bază Perl pentru a ajuta la depanarea erorilor pe teren
locales.

-F acum implică -a si -a implică -n
În prealabil -F fără -a a fost un nu-op și -a fără -n or -p a fost un nu-op, cu asta
schimbare, dacă furnizați -F apoi amândoi -a si -n sunt implicite și dacă furnizați -a apoi -n is
subînțeles.

Puteți utiliza în continuare -p pentru comportamentul său suplimentar. [perl #116190]

$a si $b avertismente scutire
Variabilele speciale $a și $b, utilizate în „sort”, sunt acum scutite de avertismentele „utilizate o dată”,
chiar și acolo unde „sortarea” nu este folosită. Acest lucru face mai ușor pentru modulele CPAN să ofere funcții
folosind $a și $b în scopuri similare. [perl #120462]

Securitate


Evita posibil citit of liber()d memorie în timpul analizare
Era posibil ca liber()d memoria ar putea fi citită în timpul parsării în mod neobișnuit
circumstanța programului Perl se termină cu un heredoc și ultima linie a fișierului activată
discul care nu are caracter final de linie nouă. Acest lucru a fost rezolvat acum.

Incompatibil Modificări


"do" poate să Nu. mai lung be utilizat la apel subrutine
Formularul „do SUBROUTINE(LIST)” a dus la un avertisment de depreciere începând cu Perl v5.0.0,
și acum este o eroare de sintaxă.

Ca un citat scăpa schimbari
Caracterul de după „\c” într-un șir dublu ghilimele ("..." sau qq(...)) sau obișnuit
expresia trebuie să fie acum un caracter imprimabil și nu poate fi „{”.

Un „{” literal după „\B” sau „\b” este acum fatal.

Acestea au fost depreciate în perl v5.14.0.

Întins se întâmplă în mai mult circumstanțe; acum se conformează la documentaţie
Acest lucru afectează potrivirea expresiilor regulate și schimbarea majusculei unui șir ("lc", "\U",
etc.) în domeniul de aplicare a „use locale”. Rezultatul este acum afectat pe baza operației,
indiferent de conținutul șirului de caractere, ca documentație (perlsec, „SECURITY”
în perlcale) indică că ar trebui. Anterior, pentru operațiunea de schimbare a carcasei, dacă
șirul nu conținea caractere a căror modificare de majuscule ar putea fi afectată de localitatea, the
rezultatul nu ar fi afectat. De exemplu, rezultatul „uc()” pe un șir gol sau unul
care conține doar puncte de cod peste Latin1 este acum contaminat și nu era înainte. Asta duce la
rezultate de contaminare mai consistente. Tiparele de expresie regulată le pătează nebinarul
rezultate (cum ar fi $&, $2) dacă și numai dacă modelul conține elemente a căror potrivire depinde
pe locația actuală (potențial contaminată). La fel ca funcțiile de schimbare a carcasei, cea actuală
conținutul șirului care se potrivește acum nu contează, în timp ce înainte era. Pentru
de exemplu, dacă modelul conține un „\w”, rezultatele vor fi afectate chiar dacă potrivirea a făcut-o
nu trebuie să folosiți acea parte a modelului pentru a reuși sau a eșua, pentru că ce „\w”
potrivirile depind de locație. Cu toate acestea, de exemplu, un „." într-un model nu va activa
contaminare, deoarece punctul se potrivește cu orice caracter și care este localitatea curentă
nu schimbă în niciun fel ceea ce se potrivește și ce nu.

„\p{}”, „\P{}” potrivire are si-a schimbat hainele; pentru non-Unicode cod puncte.
„\p{}” și „\P{}” sunt definite de Unicode numai pe punctele de cod definite de Unicode („U+0000”
prin „U+10FFFF”). Comportamentul lor privind potrivirea acestor puncte legale de cod Unicode este
neschimbat, dar există modificări pentru punctele de cod 0x110000 și mai sus. Anterior, Perl
a tratat rezultatul potrivirii „\p{}” și „\P{}” cu acestea ca „undef”, ceea ce
se traduce prin „fals”. Pentru „\P{}”, aceasta a fost apoi completată în „adevărat”. Un avertisment
trebuia să fie ridicată atunci când s-a întâmplat asta. Cu toate acestea, diferite optimizări ar putea
preveni avertismentul, iar rezultatele au fost adesea contra-intuitive, atât cu o potrivire cât și
complementul său aparent fiind fals. Acum toate punctele de cod non-Unicode sunt tratate ca
puncte tipice de cod Unicode nealocate. Acest lucru este, în general, mai mult Do-What-I-Mean. Un avertisment
este ridicată numai dacă rezultatele sunt, probabil, diferite de o abordare strictă Unicode și
din ceea ce făcea Perl. Codul care trebuie să respecte strict Unicode poate face acest lucru
avertisment fatal, iar apoi Perl ridică întotdeauna avertismentul.

Detaliile sunt în „Dincolo de punctele de cod Unicode” în perlunicode.

„\p{Toate}” are fost extins la Meci toate posibil cod puncte
Elementul de model de expresie regulată definit de Perl „\p{Toate}”, neutilizat pe CPAN, folosit pentru
potriviți doar punctele de cod Unicode; acum se potrivește cu toate punctele de cod posibile; aia este
este echivalent cu „qr/./s”. Astfel „\p{Toate}” nu mai este sinonim cu „\p{Orice}”, care
continuă să se potrivească doar cu punctele de cod Unicode, așa cum spune Unicode că ar trebui.

Date::Dumper's producție Mai Schimbare
În funcție de structurile de date descărcate și de setările setate pentru Data::Dumper, cele de dumping
ieșirea poate să se fi schimbat față de versiunile anterioare.

Dacă aveți teste care depind de rezultatul exact al Data::Dumper, acestea pot eșua.

Pentru a evita această problemă în codul dvs., testați pe structura datelor din evaluarea
structură aruncată, în loc de gunoiul în sine.

Local zecimal punct caracter Nu. mai lung scurgeri exterior of "utilizare local" domeniu
Aceasta este de fapt o remediere a erorilor, dar un anumit cod a ajuns să se bazeze pe existența erorii, deci
această modificare este listată aici. Localitatea curentă în care rulează programul nu este
ar trebui să fie vizibil pentru codul Perl, cu excepția domeniului de aplicare a unui „utilizare local”. In orice caz,
până acum, în anumite circumstanțe, caracterul folosit pentru un punct zecimal (adesea a
virgulă) scurs în afara domeniului de aplicare. Dacă codul dvs. este afectat de această modificare, adăugați pur și simplu un
„utilizați localitatea”.

Alocări of ferestre din prize eroare Coduri la $! acum a prefera errno.h Valorile peste
WSAGetLastError() Valorile
În versiunile anterioare de Perl, Windows sockets codurile de eroare returnate de WSAGetLastError()
au fost atribuite la $!, iar unele constante, cum ar fi ECONNABORTED, nu în errno.h în VC++ (sau
diferitele porturi Windows ale gcc) au fost definite la valorile WSAE* corespunzătoare pentru a permite $!
pentru a fi testat împotriva constantelor E* exportate de Errno și POSIX.

Acest lucru a funcționat bine până la VC++ 2010 și mai târziu, care a introdus noi constante E* cu valori
> 100 în errno.h, inclusiv unele fiind (re)definite de perl la valorile WSAE*. Asta a cauzat
probleme la conectarea codului XS cu alte biblioteci care foloseau definițiile originale
of errno.h constante.

Pentru a evita această incompatibilitate, perl mapează acum codurile de eroare WSAE* la valorile E* unde
posibil și atribuie acele valori lui $!. Constantele E* exportate de Errno și POSIX
sunt actualizate pentru a se potrivi astfel încât testarea $! împotriva lor, oriunde a fost posibil anterior, va
continuă să funcționeze conform așteptărilor și toate constantele E* găsite în errno.h sunt acum exportate din
acele module cu originalul lor errno.h valori.

Pentru a evita ruperea codului Perl existent care atribuie valori WSAE* la $!, perl
acum interceptează atribuirea și efectuează aceeași mapare la valorile E* pe care o folosește
intern la atribuirea lui $! în sine.

Cu toate acestea, rămâne o incompatibilitate inversă: codul Perl existent care compară $!
față de valorile numerice ale codurilor de eroare WSAE* care au fost atribuite anterior lui $!
va fi acum spart în acele cazuri în care a fost atribuită o valoare E* corespunzătoare
in schimb. Aceasta este o problemă numai pentru acele valori E* < 100, din care au fost întotdeauna exportate
Errno și POSIX cu originalul lor errno.h valori și, prin urmare, nu a putut fi folosit pentru
Teste de cod de eroare WSAE* (de exemplu, WSAEINVAL este 10022, dar EINVAL corespunzător este 22). (E*
valorile > 100, dacă sunt prezente, au fost oricum redefinite la valori WSAE*, astfel încât compatibilitatea poate fi
realizat prin utilizarea constantelor E*, care vor funcționa atât înainte, cât și după această modificare,
deși folosind valori numerice diferite sub capotă.)

funcţii „PerlIO_vsprintf” si „PerlIO_sprintf” avea fost îndepărtat
Aceste două funcții, nedocumentate, neutilizate în CPAN și problematice, au fost eliminate.

Deprecieri


"/\C/" caracter clasă
Clasa de caractere a expresiei regulate „/\C/” este depreciată. De la perl 5.22 în sus
va genera un avertisment, iar de la perl 5.24 înainte va fi o expresie regulată
eroare de compilator. Dacă trebuie să examinați octeții individuali care alcătuiesc o codificare UTF8
caracter, apoi utilizați mai întâi „utf8::encode()” pe șir (sau o copie).

literal Control caractere in variabil nume
Această depreciere afectează lucruri precum $\cT, unde \cT este un control literal (cum ar fi „NAK”
sau caracterul „RECUNOAȘTERE NEGATIVE”) în codul sursă. În mod surprinzător, se pare că
inițial, aceasta a fost concepută ca modalitate canonică de a accesa variabile precum $^T, cu
forma caret fiind adăugată doar ca alternativă.

Forma de control literală este depreciată din două motive principale. Are ceea ce este probabil
erori neremediabile, cum ar fi $\cI nu funcționează ca alias pentru $^I și utilizarea lor nu este
portabil pe platforme non-ASCII: în timp ce $^T va funcționa peste tot, \cT este spațiu alb
EBCDIC. [perl #119123]

Referinte la neîntregi si nepozitiv numere întregi in $/
Setarea $/ la o referință la zero sau la un număr întreg negativ este acum depreciată,
și se va comporta exact de parcă ar fi fost setat la „undef”. Dacă vrei setat comportamentul slurp
$/ la „undef” în mod explicit.

Setarea $/ la o referință la un număr care nu este întreg este acum interzisă și va genera o eroare. Perl
nu a documentat niciodată ce s-ar întâmpla în acest context și în timp ce obișnuia să se comporte
la fel ca și setarea $/ la adresa referințelor în viitor, se poate comporta diferit,
așa că am interzis această utilizare.

Caracter potrivire rutine in POSIX
Utilizarea oricăreia dintre aceste funcții în modulul „POSIX” este acum depreciată: „isalnum”,
„isalpha”, „iscntrl”, „isdigit”, „isgraph”, „islower”, „isprint”, „ispunct”, „isspace”,
„isupper” și „isxdigit”. Funcțiile sunt greșite și nu funcționează pe codul UTF-8
siruri de caractere. Vedeți intrările lor în POSIX pentru mai multe informații.

Un avertisment este ridicat la primul apel către oricare dintre ei din fiecare loc din codul pe care îl au
sunt numite. (De aceea, o declarație repetată într-o buclă va genera doar un singur avertisment.)

Bazat pe interpret fire sunt acum descurajat
„Firele bazate pe interpret” furnizate de Perl nu sunt sistemul rapid și ușor pentru
multitasking la care s-ar putea aștepta sau spera. Threadurile sunt implementate într-un mod care
faceți-le ușor de utilizat greșit. Puțini oameni știu să le folosească corect sau vor putea
oferi ajutor.

Utilizarea thread-urilor bazate pe interpret în perl este oficial descurajată.

Module mutări
Următoarele module vor fi eliminate din distribuția de bază într-o versiune viitoare și
va trebui la acel moment să fie instalat din CPAN. Distribuții pe CPAN care necesită
aceste module vor trebui să le listeze ca cerințe preliminare.

Versiunile de bază ale acestor module vor emite acum avertismente de categorie „depreciate” pentru a alerta
tu la acest fapt. Pentru a reduce la tăcere aceste avertismente de depreciere, instalați modulele în cauză
de la CPAN.

Rețineți că eliminarea planificată a acestor module din nucleu nu reflectă o judecată
despre calitatea codului și nu ar trebui să fie luate ca o sugestie că utilizarea lor să fie
oprit. Excluderea lor din miez depinde în primul rând de necesitatea de a face bootstrapping
o instalare Perl complet funcțională, capabilă de CPAN, nu pentru preocupările legate de designul lor.

CGI și pachetele sale asociate CGI::
inc:: cele mai recente
Pachet::Constante
Module::Build și pachetele asociate Module::Build::

Utilitate mutări
Următoarele utilitare vor fi eliminate din distribuția de bază într-o versiune viitoare,
și la acel moment va trebui instalat din CPAN.

find2perl
s2p
a2 p

Performanţă Îmbunătățiri


· Perl are un nou mecanism de copiere la scriere care evită necesitatea copierii celei interne
buffer de șir atunci când se atribuie de la un scalar la altul. Acest lucru face copierea mare
corzile apar mult mai repede. Modificarea unuia dintre cele două (sau mai multe) șiruri după an
atribuirea va forța o copie în interior. Acest lucru face să nu fie necesară trecerea șirurilor de caractere
referință pentru eficiență.

Această funcție era deja disponibilă în 5.18.0, dar nu a fost activată în mod implicit. Este
implicit acum și astfel nu mai aveți nevoie de build perl cu Configurare argument:

-Accflags=-DPERL_NEW_COPY_ON_WRITE

Poate fi dezactivat (deocamdată) într-o versiune perl cu:

-Accflags=-DPERL_NO_COW

Pe unele sisteme de operare, Perl poate fi compilat în așa fel încât orice încercare de a
modificarea bufferelor de șir partajate de mai multe SV-uri se va bloca. În acest fel autorii XS pot testa
că modulele lor se ocupă corect de scalari copy-on-write. Consultați „Copiere la scriere” în
perlguts pentru detalii.

· Perl are un optimizator pentru modele de expresie regulată. Acesta analizează modelul la
găsiți lucruri precum lungimea minimă pe care trebuie să o aibă un șir pentru a se potrivi etc. Acum
tratează mai bine punctele de cod care sunt deasupra intervalului Latin1.

· Executarea unei expresii regex care conține ancora „^” (sau varianta acesteia sub steagul „/m”)
a fost realizat mult mai rapid în mai multe situații.

· Valorile hash precalculate sunt acum utilizate în mai multe locuri în timpul căutării metodei.

· Căutările constante ale cheilor hash ($hash{key} spre deosebire de $hash{$key}) au de mult timp
Valoarea hash internă calculată în momentul compilării, pentru a accelera căutarea. Această optimizare
a fost aplicat abia acum și la feliile de hash.

· Operatori combinați „și” și „sau” în context nul, precum cei generați pentru „dacă nu
($a && $b)” și „dacă ($a || b)” acum scurtcircuita direct la sfârșitul instrucțiunii.
[perl #120128]

· În anumite situații, când „întoarcere” este ultima instrucțiune din principalul subrutinei
domeniul de aplicare, acesta va fi optimizat. Aceasta înseamnă cod ca:

sub baz { return $cat; }

se va comporta acum ca:

sub baz { $cat; }

care este considerabil mai rapid.

[perl #120765]

· Cod ca:

$x-ul meu; # sau @x, %x
$y-ul meu;

este acum optimizat pentru:

meu ($x, $y);

În combinație cu optimizarea padrange introdusă în v5.18.0, aceasta înseamnă mai mult
neinițializat, declarațiile mele variabile sunt de asemenea optimizate, deci:

$x-ul meu; @y-ul meu; %z-ul meu;

devine:

meu ($x, @y, %z);

[perl #121077]

· Crearea anumitor tipuri de liste, inclusiv matrice și felii hash, este acum
mai repede.

· Optimizarea pentru tablouri indexate cu un mic întreg constant este acum aplicată
numere întregi în intervalul -128..127, mai degrabă decât 0..255. Acest lucru ar trebui să accelereze codul Perl
folosind expresii precum $x[-1], în detrimentul utilizării codului (probabil mult mai rar).
expresii ca $x[200].

· Prima iterație peste un hash mare (folosind „chei” sau „fiecare”) este acum mai rapidă. Aceasta este
realizat prin prealocarea stării interne a iteratorului hash-ului, mai degrabă decât în ​​mod leneș
creându-l atunci când hash-ul este repetat pentru prima dată. (Pentru hashe-uri mici, iteratorul este încă
creat numai atunci când este nevoie prima dată. Presupunerea este că hashe-urile mici sunt mai probabile
să fie folosite ca obiecte și, prin urmare, niciodată alocate. Pentru hashuri mari, este mai puțin
probabil să fie adevărat, iar costul alocării iteratorului este afectat de costul
alocarea spațiului pentru hash-ul în sine.)

· Când faceți o potrivire regex globală pe un șir care a venit de la „readline” sau „<>”
operator, datele nu mai sunt copiate inutil. [perl #121259]

· Dereferentarea (ca în „$obj->[0]” sau „$obj->{k}”) este acum mai rapidă când $obj este un
instanță a unei clase care are metode supraîncărcate, dar nu supraîncărcă niciuna dintre
metode de dereferențiere „@{}”, „%{}” și așa mai departe.

· Optimizatorul Perl nu mai omite codul de optimizare care urmează anumite „eval {}”
expresii (inclusiv cele cu o buclă infinită aparentă).

· Implementarea acum face o treabă mai bună de a evita munca fără sens în timpul execuției.
Operații „nule” interne fără efecte (create ca efect secundar al analizei Perl
programe) sunt în mod normal șterse în timpul compilării. Această ștergere este acum aplicată în
unele situații care nu au fost tratate anterior.

· Perl acum face mai puține I/O pe disc atunci când se ocupă de proprietăți Unicode care acoperă până la
trei intervale de puncte de cod consecutive.

Module si pragmata


Nou Module si pragmata
· 0.007 experimental a fost adăugat la nucleul Perl.

· IO::Socket::IP 0.29 a fost adăugat la nucleul Perl.

Actualizat Module si pragmata
· Archive::Tar a fost actualizat de la versiunea 1.90 la 1.96.

· arybase a fost actualizat de la versiunea 0.06 la 0.07.

· Atribut::Handlers a fost actualizat de la versiunea 0.94 la 0.96.

· atributele au fost actualizate de la versiunea 0.21 la 0.22.

· autodie a fost actualizat de la versiunea 2.13 la 2.23.

· AutoLoader a fost actualizat de la versiunea 5.73 la 5.74.

· Autouse a fost actualizat de la versiunea 1.07 la 1.08.

· B a fost actualizat de la versiunea 1.42 la 1.48.

· B::Concise a fost actualizat de la versiunea 0.95 la 0.992.

· B::Debug a fost actualizat de la versiunea 1.18 la 1.19.

· B::Deparse a fost actualizat de la versiunea 1.20 la 1.26.

· baza a fost actualizată de la versiunea 2.18 la 2.22.

· Benchmark a fost actualizat de la versiunea 1.15 la 1.18.

· bignum a fost actualizat de la versiunea 0.33 la 0.37.

· Carp a fost actualizat de la versiunea 1.29 la 1.3301.

· CGI a fost actualizat de la versiunea 3.63 la 3.65. NOTĂ: CGI este depreciat și poate fi
eliminat dintr-o versiune viitoare de Perl.

· Charnames a fost actualizat de la versiunea 1.36 la 1.40.

· Class::Struct a fost actualizat de la versiunea 0.64 la 0.65.

· Compress::Raw::Bzip2 a fost actualizat de la versiunea 2.060 la 2.064.

· Compress::Raw::Zlib a fost actualizat de la versiunea 2.060 la 2.065.

· Config::Perl::V a fost actualizat de la versiunea 0.17 la 0.20.

· constanta a fost actualizată de la versiunea 1.27 la 1.31.

· CPAN a fost actualizat de la versiunea 2.00 la 2.05.

· CPAN::Meta a fost actualizat de la versiunea 2.120921 la 2.140640.

· CPAN::Meta::Requirements a fost actualizat de la versiunea 2.122 la 2.125.

· CPAN::Meta::YAML a fost actualizat de la versiunea 0.008 la 0.012.

· Date::Dumper a fost actualizat de la versiunea 2.145 la 2.151.

· DB a fost actualizat de la versiunea 1.04 la 1.07.

· DB_File a fost actualizat de la versiunea 1.827 la 1.831.

· DBM_Filter a fost actualizat de la versiunea 0.05 la 0.06.

· deprecate a fost actualizat de la versiunea 0.02 la 0.03.

· Devel::Peek a fost actualizat de la versiunea 1.11 la 1.16.

· Devel::PPPort a fost actualizat de la versiunea 3.20 la 3.21.

· diagnosticarea a fost actualizată de la versiunea 1.31 la 1.34.

· Digest::MD5 a fost actualizat de la versiunea 2.52 la 2.53.

· Digest::SHA a fost actualizat de la versiunea 5.84 la 5.88.

· DynaLoader a fost actualizat de la versiunea 1.18 la 1.25.

· Codificarea a fost actualizată de la versiunea 2.49 la 2.60.

· codificarea a fost actualizată de la versiunea 2.6_01 la 2.12.

· Limba engleză a fost actualizată de la versiunea 1.06 la 1.09.

$OLD_PERL_VERSION a fost adăugat ca alias al lui $].

· Errno a fost actualizat de la versiunea 1.18 la 1.20_03.

· Exporter a fost actualizat de la versiunea 5.68 la 5.70.

· ExtUtils::CBuilder a fost actualizat de la versiunea 0.280210 la 0.280216.

· ExtUtils::Command a fost actualizat de la versiunea 1.17 la 1.18.

· ExtUtils::Embed a fost actualizat de la versiunea 1.30 la 1.32.

· ExtUtils::Install a fost actualizat de la versiunea 1.59 la 1.67.

· ExtUtils::MakeMaker a fost actualizat de la versiunea 6.66 la 6.98.

· ExtUtils::Miniperl a fost actualizat de la versiunea la 1.01.

· ExtUtils::ParseXS a fost actualizat de la versiunea 3.18 la 3.24.

· ExtUtils::Typemaps a fost actualizat de la versiunea 3.19 la 3.24.

· ExtUtils::XSSymSet a fost actualizat de la versiunea 1.2 la 1.3.

· caracteristica a fost actualizată de la versiunea 1.32 la 1.36.

· fields a fost actualizat de la versiunea 2.16 la 2.17.

· File::Basename a fost actualizat de la versiunea 2.84 la 2.85.

· File::Copy a fost actualizat de la versiunea 2.26 la 2.29.

· File::DosGlob a fost actualizat de la versiunea 1.10 la 1.12.

· Fișier::Fetch a fost actualizat de la versiunea 0.38 la 0.48.

· Fișier::Find a fost actualizat de la versiunea 1.23 la 1.27.

· File::Glob a fost actualizat de la versiunea 1.20 la 1.23.

· Fișier::Spec a fost actualizat de la versiunea 3.40 la 3.47.

· Fișier::Temp a fost actualizat de la versiunea 0.23 la 0.2304.

· FileCache a fost actualizat de la versiunea 1.08 la 1.09.

· Filter::Simple a fost actualizat de la versiunea 0.89 la 0.91.

· Filter::Util::Call a fost actualizat de la versiunea 1.45 la 1.49.

· Geopt::Long a fost actualizat de la versiunea 2.39 la 2.42.

· Geopt::Std a fost actualizat de la versiunea 1.07 la 1.10.

· Hash::Util::FieldHash a fost actualizat de la versiunea 1.10 la 1.15.

· HTTP::Tiny a fost actualizat de la versiunea 0.025 la 0.043.

· I18N::Langinfo a fost actualizat de la versiunea 0.10 la 0.11.

· I18N::LangTags a fost actualizat de la versiunea 0.39 la 0.40.

· dacă a fost actualizat de la versiunea 0.0602 la 0.0603.

· inc::latest a fost actualizat de la versiunea 0.4003 la 0.4205. NOTĂ: inc::latest is
este depreciat și poate fi eliminat dintr-o versiune viitoare de Perl.

· întregul a fost actualizat de la versiunea 1.00 la 1.01.

· IO a fost actualizat de la versiunea 1.28 la 1.31.

· IO::Compress::Gzip și prietenii au fost actualizați de la versiunea 2.060 la 2.064.

· IPC::Cmd a fost actualizat de la versiunea 0.80 la 0.92.

· IPC::Open3 a fost actualizat de la versiunea 1.13 la 1.16.

· IPC::SysV a fost actualizat de la versiunea 2.03 la 2.04.

· JSON::PP a fost actualizat de la versiunea 2.27202 la 2.27203.

· List::Util a fost actualizat de la versiunea 1.27 la 1.38.

· localul a fost actualizat de la versiunea 1.02 la 1.03.

· Locale::Codes a fost actualizat de la versiunea 3.25 la 3.30.

· Locale::Maketext a fost actualizat de la versiunea 1.23 la 1.25.

· Math::BigInt a fost actualizat de la versiunea 1.9991 la 1.9993.

· Math::BigInt::FastCalc a fost actualizat de la versiunea 0.30 la 0.31.

· Math::BigRat a fost actualizat de la versiunea 0.2604 la 0.2606.

· MIME::Base64 a fost actualizat de la versiunea 3.13 la 3.14.

· Module::Build a fost actualizat de la versiunea 0.4003 la 0.4205. NOTĂ: Modulul::Build este
este depreciat și poate fi eliminat dintr-o versiune viitoare de Perl.

· Module::CoreList a fost actualizat de la versiunea 2.89 la 3.10.

· Module::Load a fost actualizat de la versiunea 0.24 la 0.32.

· Module::Load::Conditional a fost actualizat de la versiunea 0.54 la 0.62.

· Module::Metadata a fost actualizat de la versiunea 1.000011 la 1.000019.

· mro a fost actualizat de la versiunea 1.11 la 1.16.

· Net::Ping a fost actualizat de la versiunea 2.41 la 2.43.

· Opcode a fost actualizat de la versiunea 1.25 la 1.27.

· Pachetul::Constants a fost actualizat de la versiunea 0.02 la 0.04. NOTĂ:
Package::Constants este depreciat și poate fi eliminat dintr-o versiune viitoare de Perl.

· Params::Check a fost actualizat de la versiunea 0.36 la 0.38.

· părintele a fost actualizat de la versiunea 0.225 la 0.228.

· Parse::CPAN::Meta a fost actualizat de la versiunea 1.4404 la 1.4414.

· Perl::OSType a fost actualizat de la versiunea 1.003 la 1.007.

· perlfaq a fost actualizat de la versiunea 5.0150042 la 5.0150044.

· PerlIO a fost actualizat de la versiunea 1.07 la 1.09.

· PerlIO::encoding a fost actualizat de la versiunea 0.16 la 0.18.

· PerlIO::scalar a fost actualizat de la versiunea 0.16 la 0.18.

· PerlIO::via a fost actualizat de la versiunea 0.12 la 0.14.

· Pod::Escapes a fost actualizat de la versiunea 1.04 la 1.06.

· Pod::Functions a fost actualizat de la versiunea 1.06 la 1.08.

· Pod::Html a fost actualizat de la versiunea 1.18 la 1.21.

· Pod::Parser a fost actualizat de la versiunea 1.60 la 1.62.

· Pod::Perldoc a fost actualizat de la versiunea 3.19 la 3.23.

· Pod::Utilizarea a fost actualizată de la versiunea 1.61 la 1.63.

· POSIX a fost actualizat de la versiunea 1.32 la 1.38_03.

· re a fost actualizat de la versiunea 0.23 la 0.26.

· Safe a fost actualizat de la versiunea 2.35 la 2.37.

· Scalar::Util a fost actualizat de la versiunea 1.27 la 1.38.

· SDBM_File a fost actualizat de la versiunea 1.09 la 1.11.

· Socket a fost actualizat de la versiunea 2.009 la 2.013.

· Storable a fost actualizat de la versiunea 2.41 la 2.49.

· strict a fost actualizat de la versiunea 1.07 la 1.08.

· subs a fost actualizat de la versiunea 1.01 la 1.02.

· Sys::Hostname a fost actualizat de la versiunea 1.17 la 1.18.

· Sys::Syslog a fost actualizat de la versiunea 0.32 la 0.33.

· Termen::Cap a fost actualizat de la versiunea 1.13 la 1.15.

· Termen::ReadLine a fost actualizat de la versiunea 1.12 la 1.14.

· Test::Harness a fost actualizat de la versiunea 3.26 la 3.30.

· Test::Simple a fost actualizat de la versiunea 0.98 la 1.001002.

· Text::ParseWords a fost actualizat de la versiunea 3.28 la 3.29.

· Text::Tabs a fost actualizat de la versiunea 2012.0818 la 2013.0523.

· Text::Wrap a fost actualizat de la versiunea 2012.0818 la 2013.0523.

· Thread-ul a fost actualizat de la versiunea 3.02 la 3.04.

· Thread::Queue a fost actualizat de la versiunea 3.02 la 3.05.

· firele de execuție au fost actualizate de la versiunea 1.86 la 1.93.

· threads::shared a fost actualizat de la versiunea 1.43 la 1.46.

· Tie::Array a fost actualizat de la versiunea 1.05 la 1.06.

· Tie::File a fost actualizat de la versiunea 0.99 la 1.00.

· Tie::Hash a fost actualizat de la versiunea 1.04 la 1.05.

· Tie::Scalar a fost actualizat de la versiunea 1.02 la 1.03.

· Tie::StdHandle a fost actualizat de la versiunea 4.3 la 4.4.

· Time::HiRes a fost actualizat de la versiunea 1.9725 la 1.9726.

· Time::Piece a fost actualizat de la versiunea 1.20_01 la 1.27.

· Unicode::Collate a fost actualizat de la versiunea 0.97 la 1.04.

· Unicode::Normalize a fost actualizat de la versiunea 1.16 la 1.17.

· Unicode::UCD a fost actualizat de la versiunea 0.51 la 0.57.

· utf8 a fost actualizat de la versiunea 1.10 la 1.13.

· versiunea a fost actualizată de la versiunea 0.9902 la 0.9908.

· vmsish a fost actualizat de la versiunea 1.03 la 1.04.

· avertismentele au fost actualizate de la versiunea 1.18 la 1.23.

· Win32 a fost actualizat de la versiunea 0.47 la 0.49.

· XS::Typemap a fost actualizat de la versiunea 0.10 la 0.13.

· XSLoader a fost actualizat de la versiunea 0.16 la 0.17.

Documentație


Nou Documentație
perlrepository

Acest document a fost eliminat (de fapt, redenumit perlgit și a primit o revizuire majoră) în Perl
v5.14, ceea ce face ca site-urile web de documentație Perl să afișeze versiunea acum învechită în Perl
v5.12 ca cea mai recentă versiune. Acum a fost restaurat sub formă de ciot, direcționând cititorii către
informatie curenta.

Modificări la Existent Documentație
perldata

· Au fost adăugate noi secțiuni pentru a documenta noua secțiune de matrice index/valoare și cheie/valoare
sintaxa hash slice.

perldebguts

· Subrutinele de depanare „DB::goto” și „DB::lsub” sunt acum documentate. [perl #77680]

perleexperiment

· „\s” care se potrivește cu „\cK” este marcat ca experimental.

· ithreadurile au fost acceptate în v5.8.0 (dar sunt descurajate începând cu v5.20.0).

· Dublurile lungi nu sunt considerate experimentale.

· Cod în expresii regulate, verbe de backtracking expresii regulate și lvalue
subrutinele nu mai sunt listate ca experimentale. (Acest lucru afectează și perlre și
perlsub.)

perlfunc

· „chop” și „chomp” acum rețineți că pot reseta iteratorul hash.

· Tratarea argumentelor de către „exec” este acum mai clar documentată.

· „eval EXPR” are acum avertismente cu privire la extinderea numerelor în virgulă mobilă în unele locații.

· „goto EXPR” este acum documentat pentru a gestiona o expresie care se evaluează la un cod
referință ca și cum ar fi „goto &$coderef”. Acest comportament are cel puțin zece ani.

· Începând cu Perl v5.10, a fost posibil ca subrutinele din @INC să returneze o referință
la un scalar care deține codul sursă inițial pentru a preda fișierului. Asta este acum
documentate.

· Documentația „ref” a fost actualizată pentru a recomanda utilizarea „binecuvântat”, „isa”
și „reftype” atunci când aveți de-a face cu referințe la obiecte binecuvântate.

perlguts

· Au fost făcute numeroase modificări minore pentru a reflecta modificările aduse elementelor interne perl în
această eliberare.

· Au fost adăugate noi secțiuni despre Valori numai în citire și Copiere la scriere.

perlhack

· Secțiunea Super Quick Patch Guide a fost actualizată.

perlhacktips

· Documentația a fost actualizată pentru a include câteva exemple de utilizare a „gdb”.

perllexwarn

· Documentația perllexwarn folosită pentru a descrie ierarhia categoriilor de avertizare
înțeles prin pragma avertismentelor. Această descriere a fost mutată acum la avertismente
documentația în sine, lăsând perllexwarn ca un stub care indică el. Aceasta schimbare
consolidează toată documentația pentru avertismentele lexicale într-un singur loc.

perlcale

· Documentația menționează acum fc() și „\F”, și include multe clarificări și
corectii in general.

perlop

· Designul limbajului Perl a cerut întotdeauna operatori monomorfi. Asta este acum
mentionate in mod explicit.

perlopentut

· Tutorialul „deschis” a fost complet rescris de Tom Christiansen, iar acum se concentrează
să acopere doar elementele de bază, mai degrabă decât să ofere o referință cuprinzătoare la toate
lucruri care pot fi deschise. Această rescriere a venit ca rezultat al unei discuții viguroase pe tema
perl5-porters a început printr-un set de îmbunătățiri scrise de Alexander Hartmaier pentru
perlopentut existent. Un document „mai mult decât ați vrut vreodată să știți despre „deschis””.
poate urma în versiunile ulterioare ale perl.

perlre

· Faptul că motorul regexp nu face niciun efort pentru a apela constructele (?{}) și (??{}).
orice număr specificat de ori (deși practic va DWIM în caz de succes
potrivire) a fost documentată.

· Modificatorul „/r” (pentru substituție nedistructivă) este acum documentat. [perl #119151]

· Documentația pentru „/x” și „(?# comentariu)” a fost extinsă și clarificată.

perlreguts

· Documentația a fost actualizată în lumina modificărilor recente ale regcomp.c.

perlsub

· Necesitatea de a predeclara funcții recursive cu prototipuri pentru prototip
a fi onorat în apelul recursiv este acum documentat. [perl #2726]

· Acum este inclusă o listă de nume de subrutine utilizate de implementarea perl. [perl
# 77680]

perltrap

· Acum există o secțiune JavaScript.

perlunicod

· Documentația a fost actualizată pentru a reflecta modificările „Bidi_Class” în Unicode 6.3.

perlvar

· O nouă secțiune care explică problemele de performanță ale $`, $& și $', inclusiv
soluții și modificări în diferite versiuni de Perl, au fost adăugate.

· Trei nume de variabile în limba engleză care au fost documentate de mult timp, dar nu există de fapt
au fost eliminate din documentație. Acestea au fost $OLD_PERL_VERSION, $OFMT și
$ARRAY_BASE.

(De fapt, „OLD_PERL_VERSION” face există, începând cu această revizuire, dar au rămas
nedocumentat până la perl 5.22.0.)

perlxs

· Au fost rezolvate mai multe probleme din exemplul „MY_CXT”.

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

· Argumentul de ștergere este o porțiune de matrice index/valoare, utilizați secțiunea de matrice

(F) Ați folosit sintaxa index/value array slice (%array[...]) ca argument pentru „șterge”.
Probabil v-ați referit la @array[...] cu un simbol @ în schimb.

· Ștergeți argumentul este cheia/valoarea hash slice, utilizați hash slice

(F) Ați folosit sintaxa segmentului hash cheie/valoare (%hash{...}) ca argument pentru „șterge”.
Probabil v-ați referit la @hash{...} cu un simbol @ în schimb.

· Constantele listei magice nu sunt acceptate

(F) Ați atribuit o matrice magică unui element de stocare și apoi ați încercat să utilizați
subrutină din același slot. Îi ceri lui Perl să facă ceva ce nu poate face,
detaliile pot fi modificate între versiunile Perl.

· Setarea adăugată $/ la o referință %s este interzisă

Nou Avertismente

· %s referitor este experimental:

Funcția „auto-deref” este experimentală.

Începând cu v5.14.0, a fost posibil să se utilizeze apăsare, pop, taste și alte elemente încorporate
funcționează nu numai pe tipuri agregate, ci și pe referințe la acestea. Caracteristica nu a fost
implementat conform specificațiilor inițiale prevăzute și acum poate deveni redundant față de
dereferențiere postfix. A fost întotdeauna clasificată ca o caracteristică experimentală și
în v5.20.0 poartă un avertisment ca atare.

Avertismentele vor fi acum emise în momentul compilării atunci când aceste operațiuni sunt detectate.

nu dacă $] >= 5.01908, warnings => "experimental::autoderef";

Luați în considerare, totuși, înlocuirea utilizării acestor caracteristici, deoarece acestea pot schimba comportamentul
din nou înainte de a deveni stabil.

· O secvență de mai multe spații într-o definiție de alias de nume este depreciată

Spațiul alb din urmă într-o definiție de alias de nume este depreciat

Aceste două avertismente de depreciere care implică „\N{...}” au fost implementate incorect. ei
nu a avertizat în mod implicit (acum o fac) și nu a putut fi fatal prin „avertismente de utilizare
FATAL => 'depreciat'" (acum pot).

· Atributul prototip(%s) elimină atributul prototip anterior în același sub

(W misc) Un sub a fost declarat ca „sub foo : prototype(A) : prototype(B) {}”, pentru
exemplu. Deoarece fiecare sub poate avea un singur prototip, declarațiile anterioare sunt
aruncat în timp ce ultimul este aplicat.

· Caracter \0 nevalid în %s pentru %s: %s\0%s

(W syscalls) Caractere \0 încorporate în nume de căi sau alte argumente de apel de sistem
produce un avertisment începând cu 5.20. Părțile de după \0 au fost anterior ignorate de sistem
apeluri.

· Punct de cod non-Unicode potrivit 0x%X cu proprietatea Unicode; poate să nu fie portabil.

Aceasta înlocuiește mesajul „Punctul de cod 0x%X nu este Unicode, toate potrivirile \p{} eșuează; toate
\P{} potrivirile au reușit”.

· Lipsește „]” în prototip pentru %s: %s

(W illegalproto) O grupare a fost începută cu „[”, dar nu sa închis niciodată cu „]”.

· Posibilă problemă de prioritate cu operatorul de control al fluxului

(Sintaxa W) Există o posibilă problemă cu amestecarea unui operator de flux de control
(de exemplu, „întoarcere”) și un operator cu prioritate redusă, cum ar fi „sau”. Considera:

sub { return $a sau $b; }

Acesta este analizat ca:

sub { (întoarce $a) sau $b; }

Ceea ce este efectiv doar:

sub { return $a; }

Folosiți fie paranteze, fie varianta cu prioritate mare a operatorului.

Rețineți că acest lucru poate fi declanșat și pentru constructe precum:

sub { 1 dacă mor; }

· Dereferința postfix este experimentală

(S experimental::postderef) Acest avertisment este emis dacă utilizați experimental
sintaxa de dereferință postfix. Pur și simplu suprimați avertismentul dacă doriți să utilizați
caracteristică, dar să știți că, procedând astfel, vă asumați riscul de a utiliza un experiment
caracteristică care se poate modifica sau poate fi eliminată într-o versiune Perl viitoare:

fără avertismente „experimental::postderef”;
utilizați caracteristica „postderef”, „postderef_qq”;
$ref->$*;
$aref->@*;
$aref->@[@indices];
... etc ...

· Prototipul „%s” înlocuit de atributul „prototype(%s)” în %s

(Prototip W) Un prototip a fost declarat în ambele paranteze după subnumele și
prin atributul prototip. Prototipul dintre paranteze este inutil, deoarece va fi
fi înlocuit cu prototipul din atribut înainte de a fi folosit vreodată.

· Valoarea scalară @%s[%s] mai bine scrisă ca $%s[%s]

(Sintaxa W) În context scalar, ați folosit un index de matrice/secțiune de valoare (indicată cu %)
pentru a selecta un singur element dintr-o matrice. În general, este mai bine să ceri un scalar
valoare (indicată cu $). Diferența este că $foo[&bar] se comportă întotdeauna ca a
scalar, atât în ​​valoarea pe care o returnează, cât și la evaluarea argumentului său, while
%foo[&bar] oferă un context de listă pentru indicele său, care poate face lucruri ciudate dacă
te aștepți la un singur indice. Când este apelat în contextul listei, returnează, de asemenea,
index (ce returnează &bar) în plus față de valoare.

· Valoarea scalară @%s{%s} mai bine scrisă ca $%s{%s}

(Sintaxă W) În context scalar, ați folosit o secțiune cheie/valoare hash (indicată cu %) pentru
selectați un singur element al unui hash. În general, este mai bine să ceri o valoare scalară
(indicat cu $). Diferența este că $foo{&bar} se comportă întotdeauna ca un scalar,
atât în ​​valoarea pe care o returnează, cât și la evaluarea argumentului său, în timp ce @foo{&bar} și
oferă un context de listă pentru indicele său, care poate face lucruri ciudate dacă sunteți
așteptând doar un indice. Când este apelat în contextul listei, returnează și cheia
plus la valoare.

· Setarea $/ la o referință la %s ca formă de slurp este depreciată, tratând ca undef

· Ieșire neașteptată %u

(S) Ieșire() a fost sunat sau scenariul s-a terminat altfel cu grație când
„PERL_EXIT_WARN” a fost setat în „PL_exit_flags”.

· Eroare neașteptată de ieșire %d

(S) Un neprins die () a fost apelat când „PERL_EXIT_WARN” a fost setat în „PL_exit_flags”.

· Utilizarea caracterelor de control literale în numele variabilelor este depreciată

(D depreciat) Utilizarea caracterelor de control literale în sursă pentru a se referi la ^FOO
variabilele, cum ar fi $^X și ${^GLOBAL_PHASE} sunt acum depreciate. Acest lucru afectează doar codul
ca $\cT, unde \cT este un control (precum un „SOH”) în codul sursă: ${"\cT"} și $^T
rămân valabile.

· Utilizarea inutilă a modificatorului de lăcomie

Aceasta remediază [Perl #42957].

Modificări la Existent Diagnostics
· Avertismentele și erorile din motorul regexp sunt acum curate UTF-8.

· Mesajul de eroare „Condiție de comutare necunoscută” are câteva modificări ușoare. Această eroare
se declanșează atunci când există o condiție necunoscută într-o condițională „(?(foo))”. Eroarea
mesaj folosit pentru a citi:

Condiție de comutare necunoscută (?(%s în regex;

Dar ceea ce putea fi %s a fost în mare parte de noroc. Pentru „(?(foobar))”, poate ați văzut
„fo” sau „f”. Pentru caracterele Unicode, veți obține în general un șir corupt. The
mesajul a fost modificat pentru a citi:

Condiție de comutare necunoscută (?(...)) în regex;

În plus, marcatorul „<-- AICI” din eroare va indica acum locul corect în
expresia regex.

· Avertismentul „%s „\x%X” nu se mapează la Unicode” este acum listat corect ca grav
avertisment mai degrabă decât ca o eroare fatală.

· În circumstanțe rare, s-ar putea obține un „Nu se poate constrânge REF doar în citire pentru a șir”
în loc de „Modificarea unei valori numai în citire”. Această eroare alternativă
mesajul a fost eliminat.

· „Utilizarea ambiguă a * a rezolvat ca operator *”: aceasta și avertismente similare despre „%” și
„&” a apărut în anumite circumstanțe în care nu exista niciun operator de tipul citat,
deci avertismentul a fost complet greșit. Acest lucru a fost remediat [perl #117535, #76910].

· Avertismentele despre prototipurile subrutinelor malformate sunt acum mai consecvente în modul în care
prototipurile sunt redate. Unele dintre aceste avertismente ar trunchia prototipurile care conțin
nule. În alte cazuri, un avertisment ar suprima altul. Avertismentul despre ilegalitate
personajele din prototipuri nu mai spune „după „_” dacă personajul rău a apărut înainte
sublinierea.

· Regulile de pliere Perl nu sunt actualizate pentru 0x%X; vă rugăm să utilizați utilitarul perlbug pentru
raport; în regex; marcat cu <-- AICI în m/%s/

Acest mesaj este acum doar în categoria regexp și nu în categoria depreciată.
Este încă un avertisment implicit (adică sever) [perl #89648].

· %%s[%s] în context scalar mai bine scris ca $%s[%s]

Acest avertisment apare acum pentru orice %array[$index] sau %hash{key} cunoscut ca fiind în scalar
context la momentul compilării. Anterior, era scris „Valoarea scalară %%s[%s] mai bună
scris ca $%s[%s]".

· Condiția comutatorului nu este recunoscută în regex; marcat cu <-- AICI în m/%s/:

Descrierea pentru acest diagnostic a fost extinsă pentru a acoperi toate cazurile în care
poate apărea avertisment. Au existat și probleme cu poziționarea indicatorului săgeată
rezolvat.

· Mesajele de eroare pentru „my($a?$b$c)” și „my(do{})” menționează acum „condițional
expresie” și, respectiv, „do block”, în loc să citiți „Nu se poate declara nul
operațiune în „meu”'.

· Când „use re „debug”” execută o expresie regex care conține o referință, depanarea
ieșirea arată acum ce șir este potrivit.

· Mesajul de eroare acum fatal „Caracterul care urmează „\c” trebuie să fie ASCII” a fost reformulat
ca „Caracterul care urmează „\c” trebuie să fie imprimabil ASCII” pentru a sublinia faptul că în „\cX", X
trebuie să fie a imprimabilă (necontrol) caracter ASCII.

Utilitate Modificări


a2 p

· O posibilă prăbușire de la o eroare off-by-one atunci când încercați să accesați înainte de început
a unui buffer a fost fixat. [perl #120244]

bisect.pl

Instrumentul git bisection Portare/bisect.pl a avut multe îmbunătățiri.

Este furnizat ca parte a distribuției sursă, dar nu este instalat deoarece nu este
autonom, deoarece se bazează pe rularea dintr-un git checkout. Rețineți, de asemenea, că acesta
nu încearcă să repare teste, să corecteze erori de rulare sau să facă ceva util de instalat -
scopul său este de a face modificări minime pentru a obține orice revizuire istorică de interes pentru a construi
și rulați cât mai aproape de „așa cum era”, și astfel faceți „git bisect” ușor de utilizat.

· Opțional, poate rula cazul de testare cu un timeout.

· Acum poate rula in loc într-un checkout git curat.

· Poate rula cazul de testare sub „valgrind”.

· Se poate aplica corecții și corecții furnizate de utilizator la verificarea sursei înainte de a construi.

· Acum are remedieri pentru a permite construirea mai multor game istorice de bleadperl, care
poate fi util pentru a identifica originile erorilor sau schimbărilor de comportament.

find2perl

· find2perl se ocupă acum de „?” metacaracterele corect. [perl #113054]

perlbug

· perlbug acum are o opțiune „-p” pentru atașarea patch-urilor cu un raport de eroare.

· perlbug a fost modificat pentru a furniza șablonului de raport cu sfârșiturile de linie CRLF activate
Windows. [perl #121277 ]

· Perlbug face acum cât mai puține presupuneri cu privire la codificarea raportului.
Acest lucru se va schimba probabil în viitor pentru a asuma UTF-8 în mod implicit, dar permite un utilizator
trece peste.

Configuraţie si Compilation


· Makefile.PL pentru SDBM_File acum generează o mai bună makefile, care evită o cursă
condiție în timpul realizării paralele, ceea ce ar putea duce la eșecul construcției. Acesta este
ultima problemă cunoscută de realizare în paralel (pe platformele *nix) și, prin urmare, credem că a
parallel make ar trebui să fie întotdeauna fără erori.

· installperl si instalatorGestionarea opțiunilor lui a fost refactorizată pentru a utiliza Getopt::Long.
Ambele sunt folosite de către makefile „instalați” ținte și nu sunt instalate, deci acestea
este posibil ca modificările să afecteze doar scripturile de instalare personalizate.

· Opțiunile cu o singură literă au acum și nume lungi.

· Opțiunile nevalide sunt acum respinse.

· Argumentele liniei de comandă care nu sunt opțiuni sunt acum respinse.

· Fiecare are acum o opțiune „--help” pentru a afișa mesajul de utilizare.

Comportamentul pentru toate invocările documentate valide este neschimbat.

· Acolo unde este posibil, construcția evită acum invocările recursive ale face când construiești pur-
Extensii Perl, fără a elimina niciun paralelism din build. În prezent, în jur de 80
extensiile pot fi procesate direct de către make_ext.pl instrument, adică 80
invocări ale face si 160 de invocari ale miniperl nu se mai fac.

· Sistemul de compilare funcționează acum corect când se compilează sub GCC sau Clang cu link-time
optimizare activată (opțiunea „-flto”). [perl #113022]

· Nume de bază de bibliotecă distincte cu „d_libname_unique”.

La compilarea perl cu această opțiune, fișierele de bibliotecă pentru modulele XS sunt denumite
ceva „unic” -- de exemplu, Hash/Util/Util.so devine
Hash/Util/PL_Hash__Util.so. Acest comportament este similar cu ceea ce se întâmplă în prezent
VMS și servește drept bază pentru portul Android.

· opțiunea „sysroot” pentru a indica directorul rădăcină logic sub gcc și clang.

Când construiți cu această opțiune setată, atât Configurați, cât și compilatorii caută pe toate
antete și biblioteci sub acest nou sistem sysroot, în loc de /.

Aceasta este o economie enormă de timp în cazul compilarii încrucișate, dar poate ajuta și la versiunile native dacă
fișierele lanțului dvs. de instrumente au locații non-standard.

· Modelul de compilare încrucișată a fost renovat. Există mai multe opțiuni noi și unele
modificări incompatibile cu înapoi:

Acum construim binare pentru miniperl și generate_uudmap pentru a fi folosite mai degrabă pe gazdă
decât să ruleze fiecare apel miniperl pe țintă; aceasta înseamnă că, scurtă de „fa test”,
nu mai avem nevoie de acces la sistemul țintă odată ce Configurarea este finalizată. Puteți oferi
binare deja construite prin opțiunile „hostperl” și „hostgenerate” pentru a configura.

În plus, dacă vizați o platformă EBCDIC de la o gazdă ASCII sau invers, veți face acest lucru
trebuie să rulați Configure cu „-Uhostgenerate”, pentru a indica faptul că generate_uudmap ar trebui
fie rulat pe țintă.

În cele din urmă, există și o modalitate de a termina Configurarea devreme, imediat după construirea
binare gazdă, prin compilare încrucișată fără a specifica o „gazdă țintă”.

Modificările incompatibile includ nu mai folosirea xconfig.h, xlib sau Cross.pm, deci
fișierele de configurare conservate și Makefiles vor trebui actualizate.

· Legat de cele de mai sus, există acum o modalitate de a specifica locația sh (sau
echivalent) pe sistemul țintă: „targetsh”.

De exemplu, Android are sh-ul său în /system/bin/sh, deci dacă se compilează încrucișat dintr-o versiune mai mult
sistem Unixy normal cu sh in / Bin / sh, „targetsh” ar ajunge ca /system/bin/sh și
„sh” ca /bin/sh.

· În mod implicit, gcc 4.9 face unele optimizări care rupe perl. The -fwrapv opțiune
dezactivează acele optimizări (și probabil altele), deci pentru gcc 4.3 și mai târziu (de când
ar putea exista probleme similare care pândesc și pe versiunile mai vechi, dar -fwrapv a fost
rupt înainte de 4.3, iar optimizările probabil nu vor dispărea), Configurare acum adauga
-fwrapv cu excepția cazului în care utilizatorul solicită -fno-wrapv, care dezactivează -fwrapv,
-fsanitize=nedefinit, care întoarce preaplinurile -fwrapv ignoră erorile de rulare.
[perl #121505 ]

Testarea


· „test.valgrind” make target permite acum testele să fie rulate în paralel. Această țintă
permite ca suita de teste Perl să fie rulată sub Valgrind, care detectează anumite tipuri de C
erori de programare, deși cu costuri semnificative în timpul de rulare. Pe hardware adecvat,
permițând execuția paralelă să recupereze o mare parte din acel cost suplimentar. [perl #121431]

· Diverse teste în t/portare/ nu mai sunt sărite atunci când perl .git directorul este
în afara arborelui perl și indicat de $GIT_DIR. [perl #120505]

· Suita de testare nu mai eșuează atunci când shell-ul interactiv al utilizatorului menține un $PWD
variabilă de mediu, dar / Bin / sh folosit pentru rularea testelor nu.

Platformă Asistență


Nou Platforme
Android
Perl poate fi acum creat pentru Android, fie nativ, fie prin compilare încrucișată, pentru
toate cele trei arhitecturi disponibile în prezent (ARM, MIPS și x86), pe o gamă largă de
versiuni.

Bitrig
S-a adăugat suport pentru compilare pentru Bitrig, un fork al OpenBSD.

FreeMiNT
A fost adăugat suport pentru FreeMiNT, un sistem de operare open-source gratuit pentru sistemul Atari ST și
succesorii săi, bazat pe MinT original care a fost adoptat oficial de Atari.

Synology
Synology își livrează cutiile NAS cu o distribuție Linux redusă (DSM) la un preț relativ ieftin
CPU-uri (cum ar fi Marvell Kirkwood mv6282 - ARMv5tel sau Freescale QorIQ P1022 ppc -
e500v2) nu este destinat stațiilor de lucru sau dezvoltării. Aceste cutii ar trebui să fie construite acum. The
problemele de bază sunt locația non-standard pentru unelte.

întrerupte Platforme
"sfio"
Codul legat de suportul sistemului I/O „sfio” a fost eliminat.

Perl 5.004 a adăugat suport pentru a utiliza API-ul nativ al „sfio”, sistemul AT&T Safe/Fast I/O
bibliotecă. Acest cod încă construit cu v5.8.0, deși cu multe teste de regresie eșuate,
dar a fost rupt din greșeală înainte de lansarea v5.8.1, ceea ce înseamnă că nu a funcționat
pe orice versiune de Perl lansată de atunci. În peste un deceniu nu am primit niciun bug
rapoarte despre acest lucru, prin urmare este clar că nimeni nu folosește această funcționalitate pe niciunul
versiune de Perl care este încă acceptată în orice grad.

AT&T 3b1
Configurați suportul pentru 3b1, cunoscut și sub numele de AT&T Unix PC (și AT&T similar
7300), a fost eliminat.

DG/UX
DG/UX a fost un Unix vândut de Data General. Ultima lansare a fost în aprilie 2001. Numai
rulează pe hardware-ul propriu al Data General.

EBCDIC
În absența unei surse regulate de rapoarte de fum, codul destinat să sprijine nativ
Platformele EBCDIC vor fi eliminate din perl înainte de 5.22.0.

Specific platformei notițe
Cygwin
· recv () pe un handle conectat ar popula adresa expeditorului returnat cu
orice s-a întâmplat să fie în tamponul de lucru. recv () acum folosește o soluție
similar cu Win32 recv () wrapper și returnează un șir gol când recvfrom(2)
nu modifică lungimea adresei furnizate. [perl #118843]

· S-a remediat o eroare de construire în cygwin.c pe Cygwin 1.7.28.

Testele se ocupă acum de erorile care apar atunci când „cygserver” nu rulează.

GNU / Hurd
Biblioteca de compatibilitate BSD „libbsd” nu mai este necesară pentru versiuni.

Linux
Fișierul indicii caută acum „libgdbm_compat” numai dacă „libgdbm” în sine este dorit.
Primul nu este niciodată util fără cel din urmă și, în anumite circumstanțe, inclusiv acesta
ar putea de fapt împiedica construirea.

Mac OS
Sistemul de compilare onorează acum o setare „ld” furnizată de utilizatorul care rulează Configurare.

miezul nopțiiBSD
„objformat” a fost eliminat din versiunea 0.4-RELEASE a MidnightBSD și a fost
depreciat la versiunile anterioare. Acest lucru a făcut ca mediul de construcție să fie eronat
configurat pentru „a.out” mai degrabă decât „elf”. Acest lucru a fost acum corectat.

Platforme mixte-endian
Codul care suportă operațiunile de „împachetare” și „depachetare” pe platformele mixte endian a fost
îndepărtat. Credem că Perl nu a putut de mult să construiască pe endian mixt
arhitecturi (cum ar fi PDP-11s), așa că nu credem că această schimbare va afecta vreuna
platforme care au putut construi v5.18.0.

extensia VMS
· Caracteristica „PERL_ENV_TABLES” pentru a controla populația %ENV la pornirea Perl
a fost defect în Perl 5.16.0, dar acum a fost remediat.

· Omiteți verificările de acces la telecomenzi în opendir(). [perl #121002]

· O verificare pentru metacaracterele glob într-o cale returnată de operatorul „glob()” are
a fost înlocuit cu o verificare pentru caracterele wildcard VMS. Acest lucru salvează un semnificativ
număr de apeluri inutile „lstat()” astfel încât unele operațiuni simple glob devin
60-80% mai rapid.

Win32
· „Redenumiți” și „legați” pe Win32 acum setați $! la ENOSPC și EDQUOT atunci când este cazul.
[perl #119857]

· Opțiunile makefile BUILD_STATIC și ALL_STATIC pentru a lega unele sau (aproape) toate
extensii static (în perl520.dll și, de asemenea, într-un perl-static.exe separat)
au fost sparte pentru versiunile MinGW. Acest lucru a fost rezolvat acum.

Opțiunea ALL_STATIC a fost, de asemenea, îmbunătățită pentru a include codul și Win32
extensii (atât pentru versiunile VC++, cât și pentru MinGW).

· A fost adăugat suport pentru construirea cu Visual C++ 2013. În prezent sunt două
posibile eșecuri de testare (consultați „Testarea Perl pe Windows” în perlwin32) care va
sper sa se rezolve in curand.

· S-a adăugat suport experimental pentru construirea cu Intel C++ Compiler. The
nmake makefile (win32/Makefile) și dmake makefile (win32/makefile.mk) pot fi
folosit. Un „test nmake” nu va trece în acest moment din cauza cpan/CGI/t/url.t.

· Uciderea unui arbore de proces cu „kill” în perlfunc și un semnal negativ, a fost rupt
începând cu 5.18.0. În această eroare, „kill” a returnat întotdeauna 0 pentru un semnal negativ
chiar și pentru PID-uri valide și niciun proces nu a fost încheiat. Acest lucru a fost remediat [perl
#121230].

· Timpul necesar pentru a construi perl pe Windows a fost redus destul de semnificativ (timp
economii în regiunea de 30-40% sunt de obicei observate) prin reducerea numărului de,
de obicei eșuând, I/O apelează pentru fiecare „require()” (pentru miniperl.exe numai). [perl
#121119 ]

· Aproximativ 15 minute de somn inactiv a fost eliminată din rularea „testului de a face” din cauza a
bug în care monitorul de timeout folosit pentru teste nu a putut fi anulat odată ce
testul s-a încheiat și perioada de timeout completă a trecut înainte de a rula următorul test
fişier. [perl #121395 ]

· Pe un perl construit fără pseudo-furcătură (construcțiile pseudo-furcă nu au fost afectate de acest lucru
bug), uciderea unui arbore de proces cu „kill()” și a rezultat un semnal negativ
„kill()” inversând valoarea returnată. De exemplu, dacă „kill()” a ucis 1 proces
arborele PID, atunci a returnat 0 în loc de 1, iar dacă „kill()” a fost trecut 2 invalid
PID-urile, apoi a returnat 2 în loc de 0. Probabil că acesta a fost cazul de la
Caracteristica de ucidere a arborelui de proces a fost implementată pe Win32. Acum a fost corectat la
urmați comportamentul documentat. [perl #121230
]

· Când construiți un perl pe 64 de biți, o memorie neinițializată citește miniperl.exe, folosit
în timpul procesului de construire, ar putea duce la 4 GB wperl.exe fiind creat. Aceasta are
acum a fost reparat. (Rețineți că perl.exe în sine a fost neafectat, dar evident
wperl.exe ar fi fost complet spart.) [perl #121471
]

· Perl poate fi acum construit cu gcc versiunea 4.8.1 de lahttp://www.mingw.org>. Acest
a fost rupt anterior din cauza unei definiții incorecte a DllMain() într-unul din perl
fișiere sursă. Mai devreme gcc versiunile au fost, de asemenea, afectate la utilizarea versiunii 4 a
pachet w32api. Versiuni ale gcc disponibil de la
<http://mingw-w64.sourceforge.net/> nu au fost afectate. [perl #121643
]

· Cablul de testare nu are acum erori atunci când perl este construit pe o unitate FAT cu
Sistemul de operare Windows pe o unitate NTFS. [perl #21442
]

· La clonarea stivei de context furculiţă() emulare, Perl_cx_dup() s-ar prăbuși
accesarea informațiilor despre parametri pentru intrările din stiva de context care au inclus nr
parametri, ca în cazul „&foo;”. [perl #121721
]

· Introdus de perl #113536
, o scurgere de memorie pe fiecare
apel la "sistem" și backtick (" `` "), pe majoritatea Perl-urilor Win32 începând de la 5.18.0
a fost fixat. Scurgerea memoriei a avut loc numai dacă ați activat psuedo-furk în dvs
versiunea Win32 Perl și rulau această versiune pe Server 2003 R2 sau un sistem de operare mai nou.
Scurgerea nu apare pe WinXP SP3. [perl #121676
]

WinCE
· Clădirea modulelor XS a fost în mare parte restaurată. Mai mulți încă nu pot (încă)
fi construit, dar acum este posibil să construiți Perl pe WinCE cu doar câteva
alte corecții (la Socket și ExtUtils::MakeMaker), sperăm să fie încorporate
în curând.

· Perl poate fi acum construit într-o singură lovitură, fără intervenția utilizatorului pe WinCE prin rulare
„nmake -f Makefile.ce all”.

Suportul pentru construirea cu EVC (Embedded Visual C++) 4 a fost restaurat. Perl poate
de asemenea, să fie construit folosind Smart Devices pentru Visual C++ 2005 sau 2008.

Intern Modificări


· Reprezentarea internă s-a schimbat pentru variabilele de potrivire $1, $2 etc., $`, $&,
$', ${^PREMATCH}, ${^MATCH} și ${^POSTMATCH}. Folosește puțin mai puțină memorie, evită
comparații de șiruri și conversii numerice în timpul căutării și folosește cu 23 de rânduri mai puține
C. Această modificare nu ar trebui să afecteze niciun cod extern.

· Matricele folosesc acum NULL intern pentru a reprezenta sloturile neutilizate, în loc de &PL_sv_undef.
&PL_sv_undef nu mai este tratată ca o valoare specială, deci av_store(av, 0, &PL_sv_undef)
va face ca elementul 0 al acelei matrice să dețină un scalar nedefinit doar pentru citire. „$array[0] =
orice" va croai și "\$array[0]" se va compara egal cu "\undef".

· SV a revenit HeSVKEY_force() acum reflectă corect caracterul UTF8 al
cheia hash subiacentă atunci când cheia respectivă nu este stocată ca SV. [perl #79074]

· Anumite funcții rar utilizate și macrocomenzi disponibile pentru codul XS sunt acum depreciate.
Acestea sunt: ​​„utf8_to_uvuni_buf” (folosește „utf8_to_uvchr_buf” în schimb),
„valid_utf8_to_uvuni” (folosește „utf8_to_uvchr_buf” în schimb), „NATIVE_TO_NEED” (asta a făcut
oricum nu funcționează corect) și „ASCII_TO_NEED” (oricum nu a funcționat corect).

Începând cu această ediție, aproape niciodată codul aplicației nu trebuie să facă distincție
între setul de caractere al platformei și Latin1, pe care cele mai mici 256 de caractere de
Unicode sunt bazate. Codul nou nu ar trebui să folosească „utf8n_to_uvuni” (utilizați „utf8_to_uvchr_buf”
în schimb), nici „uvuni_to_utf8” (folosește „uvchr_to_utf8” în schimb),

· Comanda rapidă Makefile vizează multe teste și profilare rar (sau niciodată) folosite
ținte au fost eliminate sau îmbinate în singura altă țintă Makefile care folosește
lor. Mai exact, aceste ținte au dispărut, împreună cu documentația care face referire
le sau explicat cum să le folosești:

verificare.a treia verificare.utf16 verificare.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.third perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.al treilea
test.torture test.utf16 test.utf8 test_notty.deparse
test_notty.third test_notty.valgrind test_prep.third
test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
ucheck.valgrind utest utest.third utest.utf16 utest.valgrind

Este încă posibil să rulați comenzile relevante cu „mâna” - fără subiacente
funcționalitatea a fost eliminată.

· Acum este posibil să împiedicați Perl să inițialeze gestionarea localizării. În majoritatea cazurilor,
Perl nu acordă atenție localizării. (Vezi perllocale.) Cu toate acestea, până acum, mai departe
la pornire, a inițializat întotdeauna gestionarea locale la valoarea implicită a sistemului, pentru orice eventualitate
programul care se execută ajunge să folosească locale. (Acesta este unul dintre primele lucruri a
Programul conștient de locație ar trebui să funcționeze, cu mult înainte ca Perl să știe dacă va fi cu adevărat necesar
sau nu.) Acest lucru funcționează bine, cu excepția cazului în care Perl este încorporat într-o altă aplicație care
dorește o locație care nu este implicită a sistemului. Acum, dacă variabila de mediu
„PERL_SKIP_LOCALE_INIT” este setat la momentul pornirii Perl, acest pas de inițializare
este omis. Înainte de aceasta, pe platformele Windows, singura soluție pentru aceasta
deficiența a fost utilizarea unei copii piratate a codului intern Perl. Aplicații care au nevoie
pentru a utiliza Perl mai vechi pot descoperi dacă Perl-ul încorporat pe care îl folosesc are nevoie de
soluție prin testarea că simbolul preprocesorului C „HAS_SKIP_LOCALE_INIT” nu este
definit. [RT #38193]

· „BmRARE” și „BmPREVIOUS” au fost eliminate. Nu au fost folosite nicăieri și nu sunt
parte a API-ului. Pentru modulele XS, acestea sunt acum #definite ca 0.

· „sv_force_normal”, care, de obicei, cântă la valori doar în citire, folosit pentru a permite doar citire
valorile care urmează să fie modificate în timpul compilării. Acest lucru a fost schimbat în croak doar pentru citire
valori indiferent. Această schimbare a descoperit câteva erori de bază.

· Noul mecanism de copiere la scriere al lui Perl (care este acum activat implicit), permite orice
Scalarul „SvPOK” va fi actualizat automat la un scalar de copiere la scriere atunci când este copiat. A
numărul de referințe din buffer-ul șirului este stocat în propriul tampon șir.

De exemplu:

$ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
SV = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 „abc”\0
CUR = 3
LEN = 16
COW_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 „abc”\0
CUR = 3
LEN = 16
COW_REFCNT = 1

Rețineți că ambii scalari au același buffer PV și au un COW_REFCNT mai mare decât
zero.

Aceasta înseamnă că codul XS care dorește să modifice tamponul „SvPVX()” al unui SV ar trebui
apelați mai întâi „SvPV_force()” sau similar, pentru a asigura un buffer valid (și nepartajat) și pentru a
apelați „SvSETMAGIC()” după aceea. De fapt, acesta a fost întotdeauna cazul (de exemplu
cheile hash erau deja copy-on-write); această schimbare doar răspândește comportamentul COW la a
varietate mai mare de SV.

O diferență importantă este că înainte de 5.18.0, scalari cu cheie hash partajată obișnuiau să aibă
setul de steag „SvREADONLY”; nu mai este cazul.

Acest nou comportament poate fi încă dezactivat prin rulare Configurare cu
-Accflags=-DPERL_NO_COW. Această opțiune va fi probabil eliminată în Perl 5.22.

· „PL_sawampersand” este acum o constantă. Comutatorul oferit de această variabilă (la
activați/dezactivați copia înainte de meci în funcție de dacă $& a fost văzut).
eliminat și înlocuit cu copy-on-write, eliminând câteva erori.

Comportamentul anterior poate fi încă activat prin rulare Configurare cu
-Accflags=-DPERL_SAWAMPERSAND.

· Funcțiile „my_swap”, „my_htonl” și „my_ntohl” au fost eliminate. Este neclar
de ce aceste funcții au fost vreodată marcate ca A, parte a API-ului. Codul XS nu îi poate apela
direct, deoarece nu se poate baza pe compilarea lor. Deloc surprinzător, niciun cod pe CPAN
le face referire.

· Semnătura funcției regex „Perl_re_intuit_start()” sa schimbat; functia
pointerul „intuit” din structura pluginului motorului regex sa schimbat și el în consecință. A
a fost adăugat un nou parametru, „strbeg”; aceasta are aceeași semnificație cu același nume
parametru în „Perl_regexec_flags”. Anterior intuit ar încerca să ghicească începutul
șirul de la SV-ul transmis (dacă există) și uneori ar fi greșit (de exemplu, cu un
SV supraîncărcat).

· Semnătura funcției regex „Perl_regexec_flags()” sa schimbat; functia
pointerul „exec” din structura pluginului motorului regex sa schimbat și el pentru a se potrivi. The
Parametrul „minend” are acum tipul „SSize_t” pentru a suporta mai bine sistemele pe 64 de biți.

· Codul XS poate folosi diverse macrocomenzi pentru a schimba majusculele unui caracter sau punct de cod (pentru
exemplu „toLOWER_utf8()”). Doar câteva dintre acestea au fost documentate până acum; si acum
ele ar trebui să fie utilizate în detrimentul apelării funcțiilor de bază. Vezi „Personajul
schimbarea cazului" în perlapi.

· Codul a tratat destul de inconsecvent cu uid-uri și gid-uri. Unele locuri au presupus că ei
ar putea fi depozitate în siguranță în UV-uri, altele în IV-uri, altele în int. Sunt patru macrocomenzi noi
introdus: SvUID(), sv_setuid(), SvGID() și sv_setgid()

· „sv_pos_b2u_flags” a fost adăugat la API. Este similar cu „sv_pos_b2u”, dar
acceptă șiruri lungi de caractere pe platforme pe 64 de biți.

· „PL_exit_flags” poate fi folosit acum de către embeders perl sau alt cod XS pentru a avea perl „warn”
sau „avorta” la o încercare de ieșire. [perl #52000]

· Compilarea cu „-Accflags=-PERL_BOOL_AS_CHAR” permite acum compilatoarelor C99 și C++ să
emulați aliasingul „bool” cu „char” pe care îl face perl pentru compilatoarele C89. [perl
# 120314]

· Argumentul „sv” în „sv_2pv_flags” în perlapi, „sv_2iv_flags” în perlapi,
„sv_2uv_flags” în perlapi și „sv_2nv_flags” în perlapi și ambalajele lor mai vechi
sv_2pv, sv_2iv, sv_2uv, sv_2nv, acum nu este NULL. Dacă treceți acum NULL, se va bloca. Când
markerul non-NULL a fost introdus în masă în 5.9.3, funcțiile au fost marcate ca non-
NULL, dar de la crearea SV API în 5.0 alpha 2, dacă a fost trecut NULL,
funcțiile au returnat 0 sau valori de tip fals. Codul care acceptă argumentul „sv” fiind
non-NULL datează direct la 5.0 alpha 2 și indirect la Perl 1.0 (pre 5.0 api). The
lipsa documentației că funcțiile acceptau un „sv” NULL a fost corectată în 5.11.0
iar între 5.11.0 și 5.19.5 funcțiile au fost marcate NULLOK. Ca o optimizare a
Codul NULLOK a fost acum eliminat, iar funcțiile au devenit din nou marcate non-NULL,
deoarece macro-urile de tip getter de bază nu transmit niciodată NULL acestor funcții și s-ar bloca
înainte de a trece vreodată de NULL.

Singurul mod în care un „sv” NULL poate fi transmis la funcțiile sv_2*v* este dacă codul XS direct
apelează sv_2*v*. Acest lucru este puțin probabil, deoarece codul XS utilizează macrocomenzi Sv*V* pentru a obține elementele de bază
valoare din SV. O posibilă situație care duce la transmiterea unui „sv” NULL
Funcțiile sv_2*v*, dacă codul XS își definește propriile macrocomenzi Sv*V* de tip getter, care verifică
pentru NULL înainte dereferențierea și verificarea steagurilor SV prin API-ul public Sv*OK*
macrocomenzi sau direct folosind API-ul privat „SvFLAGS”, iar dacă „sv” este NULL, atunci apelând
sv_2*v funcționează cu un literal NULL sau trecând „sv” care conține o valoare NULL.

· newATTRSUB este acum o macrocomandă

API-ul public newATTRSUB a fost anterior o macrocomandă pentru funcția privată
Perl_newATTRSUB. Funcția Perl_newATTRSUB a fost eliminată. newATTRSUB este acum macro pentru
o funcție internă diferită.

· Modificări ale avertismentelor generate de „utf8n_to_uvchr()”

Această funcție de nivel inferior decodifică primul caracter al unui șir UTF-8 într-un cod
punct. Este accesibil codului de nivel „XS”, dar este descurajat să îl folosească
direct. Există funcții de nivel superior care numesc acest lucru și care ar trebui utilizate
în schimb, cum ar fi „utf8_to_uvchr_buf” în perlapi. Pentru completitudine însă, aceasta
documentează unele modificări aduse acestuia. Acum, testele pentru malformații se fac înaintea oricăror teste
pentru alte probleme potențiale. Una dintre aceste probleme implică puncte de cod atât de mari încât
ele nu au apărut niciodată în niciun standard oficial (standardul actual a crescut
înapoi cel mai înalt punct de cod acceptabil din versiunile anterioare). Este posibil (deși
nu este făcut în CPAN) pentru a avertiza și/sau a interzice aceste puncte de cod, acceptând totodată mai mici
puncte de cod care sunt încă peste limita legală Unicode. Mesajul de avertizare pentru
aceasta include acum punctul de cod dacă este reprezentabil pe mașină. Anterior ea
întotdeauna afișați octeți bruti, ceea ce face în continuare pentru codul nereprezentabil
puncte.

· Modificări ale motorului regex care afectează interfața motorului regex conectabil

Multe steaguri care erau expuse prin regexp.h și folosite pentru a popula extflag-urile
membrii struct regexp au fost eliminate. Aceste câmpuri erau private din punct de vedere tehnic
Motorul regexp al lui Perl și nu ar fi trebuit să fie expus acolo în primul rând.

Steagurile afectate sunt:

RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS

Precum și următoarele măști de steag:

RXf_ANCH_SINGLE
RXf_ANCH

Toate au fost redenumite în echivalente PREGf_ și mutate în regcomp.h.

Comportamentul obținut anterior prin setarea unuia sau mai multor semnalizatoare RXf_ANCH_ (prin
masca RXf_ANCH) au fost acum înlocuite cu un *unic* bit de steag în extflags:

RXf_IS_ANCHORED

Motoarele regex conectabile care anterior setau aceste steaguri ar trebui să seteze acum acest lucru
steag SINGUR.

· Nucleul Perl folosește acum în mod constant „av_tindex()” („indexul superior al unei matrice”) ca
sinonim denumit mai clar pentru „av_len()”.

· Variabila interpretor obscure „PL_timesbuf” este de așteptat să fie eliminată la începutul anului
Seria de dezvoltare 5.21.x, astfel încât Perl 5.22.0 nu o va oferi autorilor XS.
Deși variabila încă există în 5.20.0, sperăm că acest avertisment prealabil al
deprecierea va ajuta pe oricine folosește acea variabilă.

Selectate Bug Corecții


Regulat Expresii
· S-a remediat un număr mic de construcții regexp care ar putea să nu se potrivească sau să se blocheze
perl când șirul care este potrivit a fost alocat deasupra liniei de 2 GB pe 32 de biți
sisteme. [RT #118175]

· Diverse scurgeri de memorie care implică analiza expresiei regulate „(?[...])”.
constructii au fost fixate.

· „(?[...])” permite acum interpolarea modelelor precompilate constând din „(?[...])”
cu clase de caractere între paranteze în interior ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
Anterior, parantezele confundau analizatorul expresiei regulate.

· Poate apărea mesajul de avertizare „Cuantificator neașteptat pe o expresie de lungime zero”.
de două ori începând cu Perl v5.10 pentru o expresie regulată care conține și alternanțe
(de exemplu, „a|b”) declanșând optimizarea trie.

· Perl v5.18 a introdus din neatenție o eroare prin care interpolarea mixte în sus și în jos
șirurile UTF-8 gradate într-un regex ar putea avea ca rezultat UTF-8 malformat în model:
în special dacă un caracter retrogradat din intervalul „\x80..\xff” a urmat un UTF-8
sfoară, de ex

utf8::upgrade( my $u = "\x{e5}");
utf8::downgrade(my $d = "\x{e5}");
/$u$d/

[RT #118297]

· În expresiile regulate care conțin mai multe blocuri de cod, valorile $1, $2 etc.,
setate de apelurile cu expresii regulate imbricate ar curge de la un bloc la altul. Acum
aceste variabile se referă întotdeauna la expresia regulată exterioară de la începutul lui an
bloc încorporat [perl #117917].

· „/$qr/p” a fost spart în Perl 5.18.0; steagul „/p” a fost ignorat. Acest lucru a fost reparat.
[perl #118213]

· Începând cu Perl 5.18.0, o construcție precum „/[#](?{})/x” ar avea „#” incorect
interpretat ca un comentariu. Blocul de cod ar fi omis, neparsat. Asta a fost
corectat.

· Începând cu Perl 5.001, o expresie regulată precum „/[#$a]/x” sau „/[#]$a/x” ar avea
„#” este interpretat incorect ca un comentariu, astfel încât variabila nu se interpolează.
Acest lucru a fost corectat. [perl #45667]

· Perl 5.18.0 a făcut din greșeală expresiile regulate dereferențiate ("${ qr// }") false ca
booleene. Acest lucru a fost rezolvat.

· Utilizarea lui „\G” în expresiile regulate, acolo unde nu este la începutul modelului, este
acum ceva mai puțin buggy (deși este încă oarecum problematic).

· În cazul în care o expresie regulată include blocuri de cod ("/(?{...})/") și unde se utilizează
supraîncărcarea constantă a declanșat o recompilare a blocului de cod, al doilea
compilația nu și-a văzut sfera lexicală exterioară. Aceasta a fost o regresie în Perl 5.18.0.

· Poziția șirului setată de „pos” s-ar putea schimba dacă șirul și-a schimbat reprezentarea
intern către sau de la utf8. Acest lucru s-ar putea întâmpla, de exemplu, cu referiri la obiecte cu
supraîncărcarea șirurilor.

· Preluarea referințelor la valorile returnate a două apeluri „pos” cu același argument și
apoi atribuirea unei referințe la unul și „undef” celuilalt, ar putea duce la afirmare
defecțiuni sau scurgeri de memorie.

· Elementele @- și @+ se actualizează acum corect atunci când se referă la capturi inexistente.
Anterior, un element referit ("$ref = \$-[1]") se putea referi la o potrivire greșită
după meciurile ulterioare.

· Codul care analizează regex backrefs (sau backref/octali ambigue), cum ar fi \123, a făcut o
simplu atoi(), care ar putea încheia valori negative pe șiruri de cifre lungi și
provoacă erori de segmentare. Acest lucru a fost rezolvat acum. [perl #119505]

· Atribuirea unui alt typeglob la „*^R” nu mai face motorul expresiilor regulate
prăbușire.

· Expresia regulată „\N” scapă, atunci când este folosită fără acolade (pentru a însemna
„[^\n]”), ignora următorul „*” dacă era urmat de spații albe sub /x. A avut
a fost astfel, deoarece „\N” înseamnă „[^\n]” a fost introdus în 5.12.0.

· „s///”, „tr///” și „y///” funcționează acum când un caracter larg este folosit ca delimitator.
[perl #120463]

· Unele cazuri de secvențe neterminate (?...) în expresii regulate (de exemplu, „/(?
au fost remediate pentru a produce mesajul de eroare adecvat în loc de „panic: memory wrap”.
Alte cazuri (de exemplu, „/(?(/”)) nu au fost încă rezolvate.

· Când o referință la o referință la un obiect supraîncărcat a fost returnată de la un obișnuit
bloc de cod expresie „(??{...})”, ar putea avea loc o dereferire implicită incorectă
dacă referința interioară a fost returnată anterior de un bloc de cod.

· O variabilă legată returnată de la „(??{...})” vede valorile interioare ale variabilelor de potrivire
(adică, $1 etc. din orice potriviri din interiorul blocului) în metoda FETCH. Acesta a fost
nu este cazul dacă o referire la un obiect supraîncărcat a fost ultimul lucru atribuit
variabilă legată. În schimb, variabilele de potrivire s-au referit la modelul exterior în timpul
Apel FETCH.

· Remediați contaminarea neașteptată prin expresia regulată folosind local. Anterior, în anumite condiții,
utilizarea claselor de caractere ar putea provoca contaminare atunci când nu ar trebui. Un personaj
clasele depind de localitate, dar înainte de acest patch, uneori se producea contaminare
chiar și pentru clasele de caractere care nu depind de local. [perl #120675]

· În anumite condiții, Perl ar arunca o eroare dacă într-o aserțiune din urmă în a
regexp, afirmația se referea la un subpattern numit, plângându-se că aspectul din urmă era
variabilă când nu era. Acest lucru a fost reparat. [perl #120600], [perl #120618]. The
remedierea actuală poate fi îmbunătățită în viitor.

· $^R nu a fost disponibil în afara expresiei regulate care l-a inițializat. [perl
# 121070]

· Un set mare de remedieri și refactorizare pentru re_intuit_start() a fost fuzionat, cele mai importante
sunt:

· S-a remediat o panică la compilarea expresiei regulate „/\x{100}[xy]\x{100}{2}/”.

· S-a remediat o regresie a performanței atunci când se efectuează o potrivire a modelului global împotriva unui
Șir UTF-8. [perl #120692]

· S-a remediat o altă problemă de performanță în care se potrivește o expresie regulată, cum ar fi
„/ab.{1,2}x/” împotriva unui șir lung UTF-8 ar calcula în mod inutil octetul
decalaje pentru o mare parte a șirului. [perl #120692]

· S-a remediat o eroare de aliniere la compilarea expresiilor regulate atunci când sunt construite cu GCC pe HP-
UX pe 64 de biți.

· Pe platformele pe 64 de biți, „pos” poate fi acum setat la o valoare mai mare decât 2**31-1. [perl
# 72766]

Perl 5 Debugger si -d
· Comanda „man” a depanatorului a fost remediată. A fost defect în versiunea v5.18.0. The
Comanda „man” este asociată cu numele „doc” și „perldoc” - toate acum funcționează din nou.

· @_ este acum vizibil corect în depanator, reparând o regresie introdusă în
depanatorul v5.18.0. [RT #118169]

· În versiunile copy-on-write (prestabilit începând cu 5.20.0) „${'_<-e'}[0]” nu mai primește
stricat. Aceasta este prima linie de intrare salvată pentru utilizare de către depanator pentru o singură linie
[perl #118627].

· În versiunile fără thread, setați „${”_
determină ca „__FILE__” și unele mesaje de eroare să producă un șir corupt și nu mai
împiedică directivele „#line” din evaluările șirurilor să furnizeze liniile sursă către
depanator. Compilările threaded nu au fost afectate.

· Începând cu Perl 5.12, numerele de linie au fost eliminate cu unu dacă -d comutatorul a fost folosit pe
#! linia. Acum au dreptate.

· „*DB::DB = sub {} dacă 0” nu mai oprește modul de depanare al lui Perl să găsească „DB::DB”
subs declarate ulterior.

· Hashe-urile „%{'_<...'}” setează acum puncte de întrerupere pe „@{'_<...'}” corespunzătoare, mai degrabă decât
oricare matrice @DB::dbline are alias. [perl #119799]

· Apelați set-magic când setați $DB::sub. [perl #121255]

· Comanda „n” a depanatorului respectă acum subrutinele lvalue și trece peste ele [perl
#118839].

Lexical Subrutine
· Constantele lexicale ("my sub a() { 42 }") nu se mai blochează atunci când sunt aliniate.

· Prototipurile parametrilor atașate subrutinelor lexicale sunt acum respectate la compilare
apeluri secundare fără paranteze. Anterior, prototipurile erau onorate doar pentru
Apeluri cu parantezele. [RT #116735]

· Erori de sintaxă în subrutinele lexicale în combinație cu apeluri către aceleași subrutine
nu mai provoacă blocări în timpul compilării.

· Avertismentele de recursivitate profundă nu mai blochează subrutinele lexicale. [RT #118521]

· Sonda de sub-intrare dtrace funcționează acum cu sub-uri lexicale, în loc să se blocheze [perl
#118305].

· Nedefinirea unei subrutine lexicale inlineabile ("my sub foo() { 42 } undef &foo") ar
duce la un accident dacă avertismentele au fost activate.

· Un sub lexical nedefinit folosit ca metodă moștenită nu se mai blochează.

· Prezența unui sub lexical numit „CORE” nu mai oprește prefixul CORE:: de la
lucru.

Tot Altfel
· Codul de alocare OP returnează acum memoria aliniată corect în toate cazurile pentru „struct
pmop". Anterior, putea returna memorie doar aliniată la o limită de 4 octeți, care este
nu este corectă pentru un ithread construit cu IV-uri pe 64 de biți pe unele platforme de 32 de biți. În special,
acest lucru a făcut ca construcția să eșueze complet pe sparc GNU/Linux. [RT #118055]

· Evaluarea hashurilor mari în context scalar este acum mult mai rapidă, ca număr de utilizate
lanțurile din hash sunt acum stocate în cache pentru hash-uri mai mari. Hashe-urile mai mici continuă să nu facă
stocați-l și calculați-l atunci când este necesar, deoarece acest lucru economisește un IV. Asta ar fi 1 IV
overhead pentru fiecare obiect construit dintr-un hash. [RT #114576]

· Perl v5.16 a introdus din neatenție o eroare prin care apelurile către XSUB-uri care nu erau vizibile
la momentul compilării au fost tratate ca valori l și puteau fi atribuite, chiar și atunci când
subrutina nu a fost un sub lvalue. Acest lucru a fost rezolvat. [RT #117947]

· În Perl v5.18.0 dualvars care aveau un șir gol pentru partea șir, dar un șir diferit de zero
numărul pentru partea numărului care începe să fie tratat ca adevărat. În versiunile anterioare ei
au fost tratate ca false, reprezentarea șirului având prioritate. Bătrânii
comportamentul a fost restabilit. [RT #118159]

· Începând cu Perl v5.12, integrarea constantelor care suprascriu cuvintele cheie încorporate ale aceluiași
name a contramandat „use subs”, provocând mențiunile ulterioare ale constantei de utilizat
în schimb cuvântul cheie încorporat. Acest lucru a fost rezolvat.

· Avertismentul produs de „-l $handle” se aplică acum referințelor IO și globurilor, nu doar
glob refs. Acest avertisment este acum și UTF8-clean. [RT #117595]

· „Ștergeți local $ENV{nonexistent_env_var}” nu mai pierde memorie.

· „sortați” și „require” urmate de un cuvânt cheie prefixat cu „CORE::” acum tratați-l ca un
cuvânt cheie, și nu ca nume de subrutină sau modul. [RT #24482]

· Prin anumite enigme, este posibil ca pachetul curent să fie eliberat.
Anumiți operatori („binecuvântează”, „resetează”, „deschide”, „eval”) nu au putut face față și s-ar prăbuși.
Au fost făcute mai rezistente. [RT #117941]

· Aliasarea filehandlelor prin atribuirea glob-to-glob nu ar actualiza metoda internă
memorează corect în cache dacă a existat un pachet cu același nume ca și handle-ul fișierului, rezultând
apelurile la metoda filehandle merg la pachet. Acest lucru a fost rezolvat.

· „./Configure -de -Dusevendorprefix” nu a fost implicit. [RT #64126]

· Avertismentul „Declarație puțin probabil să fie atinsă” a fost listat în perldiag ca un
avertisment de categoria „exec”, dar a fost activat și dezactivat de categoria „sintaxă”. Pe
pe de altă parte, categoria „exec” își controla fatalitatea. Acum este în întregime
gestionate de categoria „exec”.

· Avertismentul „Lista de înlocuire este mai lungă decât lista de căutare” pentru „tr///” și „y///” nu
apare mai mult în prezența steagului „/c”. [RT #118047]

· Stringificarea NV-urilor nu sunt stocate în cache, astfel încât localitatea lexicală să controleze
stringificarea punctului zecimal. [perl #108378] [perl #115800]

· Au existat mai multe remedieri legate de gestionarea de către Perl a localurilor. perl #38193 a fost
descrise mai sus în „Modificări interne”. De asemenea, este fix #118197, unde radix
caracterul (punct zecimal) trebuia să fie un caracter ASCII (ceea ce nu funcționează pentru unii
limbi non-occidentale); și #115808, în care a returnat „POSIX::setlocale()” la eșec
un „undef” care nu avertizează că nu este definit chiar dacă acele avertismente ar fi fost
activat.

· Compilarea unui operator „split” al cărui al treilea argument este o constantă numită care se evaluează la 0
nu mai determină modificarea valorii constantei.

· O constantă numită folosită ca al doilea argument pentru „indexare” nu mai este constrânsă la a
șir dacă este o referință, expresie regulată, dualvar etc.

· O constantă numită care evaluează valoarea nedefinită folosită ca al doilea argument pentru
„index” nu mai produce avertismente „neinițializate” la momentul compilării. O să fie încă
produceți-le în timpul execuției.

· Când un scalar a fost returnat dintr-o subrutină în @INC, scalarul la care se face referire a fost
convertit magic într-o chestie IO, care poate duce la erori de „copie bizare” dacă
acel scalar a continuat să fie folosit în altă parte. Acum Perl folosește o copie internă a fișierului
scalar în schimb.

· Anumite utilizări ale operatorului „sortare” sunt optimizate pentru a modifica o matrice în loc, cum ar fi
„@a = sortează @a”. În timpul sortării, matricea este făcută doar pentru citire. Dacă un bloc de sortare
ar trebui să moară, atunci matricea a rămas doar în citire chiar și în afara „sortării”. Acest
a fost fixat.

· $a și $b în interiorul unui bloc de sortare sunt aliasate la argumentele reale pentru „sortare”, deci ele
poate fi modificată prin aceste două variabile. Acest lucru nu a funcționat întotdeauna, de exemplu, pentru
lvalue subs și $#ary și probabil mulți alți operatori. Funcționează acum.

· Argumentele pentru „sortare” sunt acum toate în contextul listei. Dacă „sortul” în sine ar fi numit
în context nul sau scalar, atunci unele, dar nu toate, argumentele au fost nule
sau context scalar.

· Prototipurile de subrutine cu caractere Unicode peste U+00FF au fost deteriorate în timpul
clonarea închiderii. Acest lucru s-ar întâmpla cu subrutinele care se închid peste variabile lexicale
declarată afară, și cu subs. lexicale.

· „UNIVERSAL::can” tratează acum primul argument în același mod în care apelurile de metodă fac:
Globurile de tip și referințele glob cu sloturi IO negoale sunt tratate ca mânere și
șirurile de caractere sunt tratate ca handlere de fișiere, mai degrabă decât pachete, dacă un handle cu acest nume
există [perl #113932].

· Apeluri de metodă pe typeglobs (de exemplu, „*ARGV->getline”) utilizate pentru a stringe tipglob și
apoi caută-l din nou. Combinat cu modificările din Perl 5.18.0, acest lucru a permis „*foo->bar”
pentru a apela metode din pachetul „foo” (cum ar fi „foo->bar”). În unele cazuri ar putea cauza
metoda care trebuie apelată pe mânerul greșit. Acum un argument typeglob este tratat ca a
handle (la fel ca „(\*foo)->bar”), sau, dacă slotul său IO este gol, apare o eroare.

· Atribuirea unui vstring unei variabile legate sau unui argument de subrutină alias la a
elementul hash sau matrice inexistent funcționează acum, fără a aplatiza vstring-ul în a
sfoară obișnuită.

· „pos”, „tie”, „tied” și „untie” nu au funcționat corect pe argumentele subrutinei cu alias
la elemente hash și matrice inexistente [perl #77814, #27010].

· Operatorul săgeată grăsime „=>” poate acum cita cuvinte cheie încorporate chiar dacă apare pe
rândul următor, făcându-l în concordanță cu modul în care tratează alte cuvinte goale.

· Autovivificarea unui stub de subrutină prin „\&$glob” a început să provoace blocări în Perl 5.18.0
dacă $glob ar fi doar o copie a unui glob real, adică un scalar care a avut un glob
atribuite acestuia. Acest lucru a fost reparat. [perl #119051]

· Perl obișnuia să scurgă un detaliu de implementare când era vorba de referire la returnare
valorile anumitor operatori. „pentru ($a+$b) { warn \$_; warn \$_ }” folosit pentru a afișa două
adrese de memorie diferite, deoarece operatorul „\” copia variabila. Sub
build-uri threaded, s-ar întâmpla și pentru constante ("pentru(1) { ... }"). Aceasta a fost
fix. [perl #21979, #78194, #89188, #109746, #114838, #115388]

· Operatorul de interval „..” a returnat aceiași scalari modificabili la fiecare apel,
cu excepția cazului în care era singurul lucru dintr-un antet de buclă „foreach”. Aceasta însemna că schimbările în
valorile din lista returnate vor fi vizibile data viitoare când operatorul a fost
executat. [perl #3105]

· Plierea constantă și alinierea subrutinei nu mai provoacă operațiuni care ar face
în mod normal returnează noi scalari modificabili pentru a returna în schimb valori doar în citire.

· Închiderile de forma „sub () { $some_variable }” nu mai sunt aliniate, determinând
modificări ale variabilei pentru a fi ignorate de apelanții subrutinei. [perl #79908]

· Valorile returnate ale anumitor operatori, cum ar fi „ref” ar fi uneori partajate între
apeluri recursive către aceeași subrutină, determinând apelul interior să modifice valoarea
returnat prin „ref” în apelul exterior. Acest lucru a fost reparat.

· „__PACKAGE__” și constantele care returnează un nume de pachet sau o cheie hash sunt acum consecvente
numai pentru citire. În diverse versiuni anterioare Perl, acestea au devenit modificabile în anumite condiții
circumstanțe.

· Activarea avertismentelor „folosit o dată” nu mai provoacă blocări ale circularităților create
la momentul compilării ("*Foo::Bar::Foo:: = *Foo::").

· Constantele undef folosite în cheile hash („utilizați constanta u => undef; $h{+u}”) nu mai
produce avertismente „neinițializate” în timpul compilării.

· Modificarea unei ținte de substituție în interiorul înlocuirii de înlocuire nu mai provoacă
se prăbușește.

· Prima declarație din interiorul unui șir de evaluări folosit pentru a utiliza setarea pragma greșită
uneori în timpul plierii constante. „eval 'uc chr 0xe0'” ar alege aleatoriu între
Unicode, octet și semantică locală. Acest lucru a fost rezolvat.

· Gestionarea valorilor returnate ale filtrelor @INC (subrutine returnate de subrutine în
@INC) a fost remediat în diferite moduri. Variabilele legate anterior au fost manipulate greșit și
setarea $_ la o referință sau typeglob poate duce la blocări.

· Funcția XS „SvPVbyte” a fost fixată pentru a funcționa cu scalari legați care revin
altceva decât o sfoară. Obișnuia să returneze utf8 în acele cazuri în care „SvPV”
ar fi.

· Perl 5.18.0 a făcut ca „--” și „++” să se blocheze din greșeală pe obișnuit dereferențiat
expresii și a oprit „++” să aplatizeze vstring-urile.

· „binecuvântează” nu mai moare cu „Nu se poate binecuvânta valoarea de non-referință” dacă primul argument este
o referință legată.

· „resetarea” cu un argument nu mai omite scalari de copiere la scriere, expresii regulate,
copii typeglob și vstrings. De asemenea, atunci când întâlniți acele valori sau numai citire, aceasta
nu mai omite nicio matrice sau hash cu același nume.

· „resetarea” cu un argument omite acum scalarii alias cu typeglobs („pentru $z (*foo) {
resetează „z” }”). Anterior, ar corup memoria sau se prăbușea.

· „ucfirst” și „lcfirst” nu respectau pragma octeților. Aceasta a fost o regresie
din Perl 5.12. [perl #117355]

· Modificările aduse „UNIVERSAL::DESTROY” actualizează acum cache-urile DESTROY în toate clasele, în loc de
determinând clasele care au avut deja obiecte distruse să continue să folosească vechiul sub.
Aceasta a fost o regresie în Perl 5.18. [perl #114864]

· Toate aparițiile fals pozitive cunoscute ale avertismentului de depreciere „Utilizarea inutilă a lui „\”;
nu scapă metacaracterul „%c””, adăugat în Perl 5.18.0, au fost eliminate. [perl
# 119101]

· Valoarea lui $^E este acum salvată în manipulatorii de semnal pe Windows. [perl #85104]

· Un handler de fișier lexical (ca în „deschide-mi $fh...”) primește de obicei un nume bazat pe
pachetul curent și numele variabilei, de exemplu "main::$fh". Sub recursivitate,
filehandle pierdea partea „$fh” a numelui. Acest lucru a fost reparat.

· Valorile neinițializate returnate de XSUB-uri nu mai sunt scutite de neinițializate
Avertizări. [perl #118693]

· "elsif ("")" nu mai produce în mod eronat un avertisment despre contextul nul. [perl
# 118753]

· Trecerea „undef” la o subrutină face ca @_ să conțină același nedefinit doar pentru citire
scalar pe care îl întoarce „undef”. În plus, „exists $_[0]” va returna acum true dacă
„undef” a fost primul argument. [perl #7508, #109726]

· Trecerea unui element de matrice inexistent la o subrutină nu îl autovivifică de obicei
cu excepția cazului în care subrutina își modifică argumentul. Acest lucru nu a funcționat corect cu
indici negativi si cu elemente inexistente in cadrul tabloului. Elementul ar
fii însuflețit imediat. Vivificarea întârziată a fost extinsă pentru a lucra cu
acestea. [perl #118691]

· Atribuirea referințelor sau globurilor scalarului returnat de $#foo după ce matricea @foo a
a fost eliberat nu mai provoacă eșecuri de afirmare la build-urile de depanare și scurgeri de memorie pe
construcții regulate.

· Pe platformele pe 64 de biți, intervalele mari, cum ar fi 1..1000000000000, nu se mai blochează, ci mănâncă
în schimb toată memoria ta. [perl #119161]

· „__DATA__” pune acum mânerul „DATA” în pachetul potrivit, chiar dacă este curent
pachetul a fost redenumit prin atribuirea globului.

· Când „moare”, „ultimul”, „următorul”, „reface”, „du-te” și „ieșire” derulează domeniul de aplicare, este posibil
pentru „DISTRUGERE” recursiv pentru a apela o subrutină sau un format care se află în prezent
ieşit. În acest caz, uneori variabilele lexicale din interiorul sub ar începe
având valori din apelul exterior, în loc să fie nedefinite așa cum ar trebui. Acest
a fost fixat. [perl #119311]

· ${^MPEN} nu mai este tratat ca un sinonim pentru ${^MATCH}.

· Perl încearcă acum puțin mai mult să returneze numărul corect de linie în „(apelant)[2]”.
[perl #115768]

· Numerele liniilor din interiorul operatorilor de tip ghilimele multilinie sunt acum raportate corect. [perl
# 3643]

· Directivele „#line” din codul încorporat în operatorii tip ghilimele sunt acum respectate.

· Numerele liniilor sunt acum corecte în interiorul celui de-al doilea here-doc când doi marcatori aici-doc
apar pe aceeași linie.

· O optimizare în Perl 5.18 a făcut presupuneri incorecte provocând o interacțiune proastă cu
modulul Devel::CallParser CPAN. Dacă modulul a fost încărcat, atunci variabile lexicale
declarat în declarații separate după o listă „me(...)” ar putea să nu fie șters
ieșire din domeniul de aplicare.

· Apelurile &xsub și „goto &xsub” permit acum subrutinei apelate să autovivifice elemente ale
@_.

· &xsub și „goto &xsub” nu se mai blochează dacă *_ a fost nedefinit și nu are nicio intrare ARRAY
(adică @_ nu există).

· &xsub și „goto &xsub” funcționează acum cu @_ legat.

· Identificatorii prea lungi nu mai provoacă o depășire a tamponului (și o blocare). Ei au inceput
făcând acest lucru în Perl 5.18.

· Avertismentul „Valoarea scalară @hash{foo} mai bine scrisă ca $hash{foo}” produce acum mult
mai puține false pozitive. În special, @hash{+function_returning_a_list} și @hash{ qw
„foo bar baz” } nu mai avertizează. Același lucru este valabil și pentru feliile de matrice. [perl #28380,
# 114024]

· „$! = EINVAL; waitpid(0, WNOHANG);” nu mai intră într-o buclă infinită internă.
[perl #85228]

· A fost remediată o posibilă eroare de segmentare în duplicarea filehandle-ului.

· O subrutină în @INC poate returna o referință la un scalar care conține inițiala
conținutul fișierului. Cu toate acestea, acel scalar a fost eliberat prematur dacă nu a fost referit
în altă parte, dând rezultate aleatorii.

· „last” nu mai returnează valori pe care aceeași declarație le-a acumulat până acum, reparând
printre altele, bug-ul de lungă durată pe care „push @a, last” ar încerca să revină
@a, copiendu-l ca pe un scalar în proces și rezultând eroarea „Bizarre
copie a ARRAY în ultimul." [perl #3112]

· În unele cazuri, mânerele de închidere a fișierelor s-au deschis la conducte către sau de la un proces, care a avut
a fost duplicat într-un mâner standard, ar apela wrapper-ul intern waitpid al perl
cu un pid de zero. Cu remedierea pentru [perl #85228], acest pid zero a fost transmis
„waitpid”, posibil blocând procesul. Nu mai așteptați procesul zero
apare. [perl #119893]

· „select” folosit pentru a ignora magia la al patrulea argument (timeout), ceea ce duce la efecte
cum ar fi blocarea „selectați” pe termen nelimitat, mai degrabă decât timpul de somn așteptat. Aceasta are
acum a fost reparat. [perl #120102]

· Numele clasei din „pentru clasa mea $foo” este acum analizat corect. În cazul
al doilea caracter al numelui clasei fiind urmat de o cifră (de exemplu, „a1b”)
da eroarea "Lipsesc $ pe variabila buclă". [perl #120112]

· Perl 5.18.0 a interzis accidental „-bareword” sub „use strict” și „use integer”.
Acest lucru a fost reparat. [perl #120288]

· „-a” la începutul unei linii (sau o cratimă cu orice literă care nu este un test de fișier
operator) nu mai produce un eronat „Utilizarea lui „-a” fără paranteze este
avertisment ambiguu. [perl #120288]

· Contextul Lvalue este acum propagat corect în blocuri goale și blocuri „dacă” și „altfel”.
în subrutinele lvalue. Anterior, matricele și hashurile erau uneori incorect
aplatizat când este returnat în contextul listei lvalue sau pot apărea erori de „copie bizare”.
[perl #119797]

· Contextul Lvalue este acum propagat la ramurile lui „||” și „&&” (și lor
echivalente alfabetice, „sau” și „și”). Aceasta înseamnă „foreach (pos $x || pos $y)
{...}" permite acum modificarea „pos” prin $_.

· „stat” și „readline” își amintesc ultimul handle folosit; primul pentru "_" special
filehandle, acesta din urmă pentru „${^LAST_FH}”. „eval „*foo if 0”” unde *foo a fost ultimul
mânerul trecut la „stat” sau „readline” ar putea face ca acel mâner să fie uitat dacă
mânerul nu a fost încă deschis. Acest lucru a fost rezolvat.

· Au fost diverse cazuri de „șterge $::{a}”, „șterge $::{ENV}” etc., care au cauzat o blocare
fix. [perl #54044]

· Setarea $! la EACCESS înainte de a apela „require” ar putea afecta comportamentul „require”.
Acest lucru a fost rezolvat.

· Mesajul de avertizare „Nu se poate folosi \1 pentru a însemna $1 în expresie” apare acum numai pe
partea dreaptă (de înlocuire) a unei înlocuiri. Anterior se putea întâmpla în cod
încorporat în partea stângă sau în orice alt operator asemănător citatelor.

· Binecuvântarea într-o referință („bless $thisref, $thatref”) a fost de mult interzisă, dar
scalari magici pentru al doilea ca $/ iar cei legati erau scutiti. Ei nu mai
sunt. [perl #119809]

· Binecuvântarea într-o referință a fost permisă accidental în 5.18 dacă argumentul de clasă a fost
o referință binecuvântată cu cache-uri de metode învechite (adică, a cărei clasă avea sub-definite
de la ultimul apel de metodă). Ele sunt interzise încă o dată, ca în 5.16.

· „$x->{key}” unde $x a fost declarat ca „clasa mea $x” nu se mai blochează dacă un
Stub-ul subrutinei Class::FIELDS a fost declarat.

· @$obj{'key'} și „${$obj}{key}” erau scutiți de verificarea câmpurilor în timpul compilării
(„Nu există un astfel de câmp de clasă”; vezi câmpurile) dar nu mai sunt.

· Un element de matrice inexistent cu un index mare trecut la o subrutină care leagă
matrice și apoi încearcă să acceseze elementul nu mai are ca rezultat o blocare.

· Declararea unui stub de subrutină numit NEGATIVE_INDICES nu mai face un tablou negativ
indicii se blochează atunci când pachetul curent este o clasă de matrice legată.

· Declararea unui stub de subrutină „require”, „glob” sau „do” în pachetul CORE::GLOBAL::
nu mai face compilarea apelurilor către funcțiile corespunzătoare.

· Aliasarea CORE::GLOBAL:: funcțiilor la constante a încetat să funcționeze în Perl 5.10, dar a
acum a fost reparat.

· Când „`...`” sau „qx/.../” denumește o suprascriere „readpipe”, interpolare cu ghilimele duble
acum se întâmplă, așa cum este cazul când nu există nicio modificare. Anterior, prezența unui
suprascrie ar face ca acești operatori asemănător ghilimelor să acționeze ca „q{}”, suprimând
interpolare. [perl #115330]

· „<<<`...`” here-docs (cu backticks ca delimitatori) acum numesc „readpipe” suprascrieri.
[perl #119827]

· „&CORE::exit()” și „&CORE::die()” respectă acum sugestiile vmsish.

· Nedefinirea unui glob care declanșează o metodă DETROY care nedefinește același glob este acum
sigur. Obișnuia să producă avertismente „Încercare de a elibera un pointer glob nereferit” și
scurgerea memoriei.

· Dacă redefinirea subrutinei ("eval 'sub foo{}'" sau "newXS" pentru codul XS) declanșează o
Metoda DETROY pe sub care este redefinit și acea metodă atribuie a
subrutină în același slot ("*foo = sub {}"), $_[0] nu mai este lăsat indicând către un
scalar eliberat. Acum DESTROY este întârziat până când noua subrutină a fost instalată.

· Pe Windows, perl nu mai sună CloseHandle() pe un mâner de priză. Asta face
depanarea mai ușoară pe Windows prin eliminarea anumitor excepții irelevante de manipulare greșită. Aceasta
de asemenea, remediază o condiție de cursă care a făcut ca funcțiile socket să eșueze aleatoriu într-un proces Perl
cu mai multe fire de operare și posibile eșecuri de testare în
dist/IO/t/cachepropagate-tcp.t. [perl #120091/118059]

· Formate care implică șiruri codificate UTF-8 sau variante ciudate, cum ar fi legături, supraîncărcări sau
Refurile stringificate (și în perls recente, vars NOK pure) ar face în general greșit
lucru în formate când varul este tratat ca un șir și tocat în mod repetat, ca în
„^<<<~~” și similare. Acest lucru a fost rezolvat acum. [perl
#33832/45325/113868/119847/119849/119851]

· „semctl(..., SETVAL, ...)” ar seta semaforul la primii 32 de biți ai celor furnizate
întreg în loc de cei 32 de biți de jos pe sistemele big-endian pe 64 de biți. [perl #120635]

· „readdir()” acum setează doar $! pe eroare. $! nu mai este setat la „EBADF” atunci când
terminarea „undef” este citită din director, cu excepția cazului în care apelul de sistem setează $!. [perl
# 118651]

· &CORE::glob nu mai provoacă o blocare intermitentă din cauza obținerii stivei de perl
corupt. [perl #119993]

· „deschide” cu straturi care încarcă module (de exemplu, „<:encoding(utf8)”) nu mai rulează
riscul de a se prăbuși din cauza corupției stivei.

· Perl 5.18 a întrerupt încărcarea automată prin apelurile la metoda „->SUPER::foo” căutând AUTOLOAD
din pachetul curent, mai degrabă decât din superclasa pachetului curent. Asta a fost
fix. [perl #120694]

· O eroare de lungă durată care provoacă „do {} până la CONSTANT”, unde constanta este adevărată
valoare, pentru a citi memoria nealocată a fost rezolvată. Acest lucru s-ar întâmpla de obicei după
o eroare de sintaxă. În versiunile anterioare de Perl, acesta s-a prăbușit intermitent. [perl #72406]

· Remediați HP-UX $! eșec. HP-UX strerror() returnează un șir gol pentru o eroare necunoscută
cod. Acest lucru a cauzat eșecul unei afirmații în versiunile DEBUGGING. Acum, în schimb,
șir returnat pentru „$!” conține text care indică că codul este pentru o eroare necunoscută.

· Elementele legate individual ale @INC (ca în „tie $INC[0]...”) sunt acum gestionate corect.
Anterior, dacă un sub returnat de un astfel de element legat ar fi tratat ca un sub
depindea dacă un FETCH a avut loc anterior.

· „getc” pe un mâner de dimensiunea unui octet după ce același operator „getc” a fost folosit pe un utf8
handle folosit pentru a trata octeții ca utf8, rezultând un comportament neregulat (de exemplu, malformat
avertismente UTF-8).

· Un „{” inițial la începutul unei linii de argument de format a fost întotdeauna interpretat ca
începutul unui bloc înainte de v5.18. În Perl v5.18, a început să fie tratat ca
un semn ambiguu. Analizorul ar ghici dacă ar fi trebuit să fie un anonim
constructor hash sau un bloc bazat pe conținut. Acum, comportamentul anterior are
fost restaurat. [perl #119973]

· În Perl v5.18 „undef *_; goto &sub” și „local *_; goto &sub” au început să se blocheze. Acest
a fost fixat. [perl #119949]

· Backtick-urile (" `` " sau " qx// ") combinate cu mai multe fire pe Win32 ar putea duce la
ieșirea trimisă către stdout pe un fir de execuție fiind capturată de backtick-urile unei comenzi externe
intr-un alt thread.

Acest lucru s-ar putea întâmpla și pentru procesele pseudo-furcate, așa cum este pseudo-furcătura Win32
implementat în termeni de fire. [perl #77672]

· „open $fh, „>+”, undef” nu mai pierde memorie atunci când TMPDIR este setat, ci indică un
directorul în care nu poate fi creat un fișier temporar. [perl #120951]

· " pentru ( $h{k} || '' ) " nu mai revine automat $h{k}. [perl #120374]

· Pe mașinile Windows, Perl acum emulează utilizarea POSIX a mediului pentru locale
initializare. Anterior, mediul era ignorat. Vezi „MEDIUL” în
perlcale.

· S-a remediat un accident la distrugerea unui GLOB cu auto-referință. [perl #121242]

Cunoscut Probleme


· IO::Socket este cunoscut că eșuează testele pe AIX 5.3. Există un petic
în instrumentul de urmărire a cererilor, #120835,
care pot fi aplicate versiunilor viitoare.

· Se știe că următoarele module au eșecuri de testare cu această versiune de Perl.
Patch-urile au fost trimise, așa că sperăm că vor exista noi lansări în curând:

· Data::Structura::Util versiune 0.15

· HTML::StripScripts versiunea 1.05

· List::Gather versiunea 0.08.

Necrolog


Diana Rosa, 27 de ani, din Rio de Janeiro, s-a odihnit îndelungat pe 10 mai 2014, împreună cu
cămilă de pluș pe care a atârnat tot timpul pe ecranul computerului. Era o pasionată
Hacker Perl care a iubit limba și comunitatea ei și care nu a ratat niciodată un eveniment Rio.pm.
Ea a fost o adevărată artistă, o pasionată de scrierea de coduri, de a cânta arii și de graffiting
ziduri. Nu te vom uita niciodată.

Greg McCarroll a murit pe 28 august 2013.

Greg era bine cunoscut din multe motive întemeiate. A fost unul dintre organizatorii primei
YAPC::Europa, care s-a încheiat cu o licitație neprogramată în care a încercat frenetic
strângeți bani în plus pentru a evita pierderea conferinței. Greg a fost cel care, din greșeală
a sosit pentru o întâlnire london.pm cu o săptămână întârziere; câțiva ani mai târziu, el a fost cel care a vândut
alegerea datei întâlnirii oficiale la o licitație YAPC::Europe și, în cele din urmă, la fel de glorioasă
lider al londonei.pm a ajuns să moștenească confuzia ireverentă pe care o crease.

Întotdeauna de ajutor, prietenos și vesel optimist, vei fi dor de tine, dar niciodată
uitat.

Mulţumiri


Perl 5.20.0 reprezintă aproximativ 12 luni de dezvoltare de la Perl 5.18.0 și
conține aproximativ 470,000 de linii de modificări în 2,900 de fișiere de la 124 autori.

Excluzând fișierele generate automat, documentația și instrumentele de lansare, au existat aproximativ
280,000 de linii de modificări la fișierele 1,800 .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.20.0:

Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi, Alan Hourihane,
Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno Siegel, Aristotel Pagaltzis,
Arthur Axel „fREW” Schmidt, Brad Gilbert, Brendan Byrd, Brian Childs, Brian Fraser, Brian
Gottreu, Chris 'BinGOs' Williams, Christian Millour, Colin Kuskie, Craig A. Berry, Dabrien
„Dabe” Murphy, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Darin McBride, David Golden,
David Leadbeater, David Mitchell, David Nicol, David Steinbrunner, Dennis Kaarsemaker,
Dominic Hargreaves, Ed Avis, Eric Brine, Evan Zacks, Părintele Chrysostomos, Florian Ragwitz,
Francois Perrad, Gavin Shelley, Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn
Brand, Hauke ​​D, Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn, James E Keenan, Jarkko
Hietaniemi, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Johan Vromans, John Gardiner
Myers, John Goodyear, John P. Linderman, John Peacock, kafka, Kang-min Liu, Karen
Etheridge, Karl Williamson, Keedi Kim, Kent Fredric, Kevin Dawson, Kevin Falcone, Kevin
Ryde, Leon Timmermans, Lukas Mai, Marc Simpson, Marcel Gruenauer, Marco Peereboom, Marcus
Holland-Moritz, Mark Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike
Doherty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil Williams,
Nicholas Clark, Niels Thykier, Niko Tyni, Olivier Mengue, Owain G. Ainsworth, Paul Green,
Paul Johnson, Peter John Acklam, Peter Martini, Peter Rabbitson, Petr PisaX, Philip
Boulain, Philip Guenther, Piotr Roszatycki, Rafael Garcia-Suarez, Reini Urban, Reuben
Thomas, Ricardo Signes, Ruslan Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish,
Slaven Rezic, Smylers, Steffen Mueller, Steve Hay, Sullivan Beck, Thomas Sibley, Tobias
Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom Hukins, Tony Cook, Victor
Efimov, Viktor Turskyi, Vladimir Timofeev, YAMASHINA Hio, Yves Orton, Zefram, Zsban
Ambrus, 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 http://rt.perl.org/perlbug/ .
Pot exista și informații la http://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 [e-mail protejat] 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
[e-mail protejat]. 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 perl5200delta online folosind serviciile onworks.net


Servere și stații de lucru gratuite

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

  • 1
    authpass
    authpass
    AuthPass este o parolă open source
    manager cu sprijin pentru popular şi
    Keepass dovedit (kdbx 3.x ȘI kdbx 4.x...
    Descărcați authpass
  • 2
    Zabbix
    Zabbix
    Zabbix este o companie deschisă de clasă enterprise
    soluție de monitorizare distribuită la sursă
    conceput pentru a monitoriza și urmări
    performanța și disponibilitatea rețelei
    servere, dispozitive...
    Descărcați Zabbix
  • 3
    KDiff3
    KDiff3
    Acest depozit nu mai este întreținut
    și se păstrează în scop de arhivă. Vedea
    https://invent.kde.org/sdk/kdiff3 for
    cel mai nou cod și
    https://download.kde.o...
    Descărcați KDiff3
  • 4
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX este o interfață grafică pentru
    Încărcătorul USB al lui Waninkoko, bazat pe
    libwiigui. Permite listarea și
    lansarea de jocuri Wii, jocuri Gamecube și
    homebrew pe Wii și WiiU...
    Descărcați USBLoaderGX
  • 5
    Firebird
    Firebird
    Firebird RDBMS oferă caracteristici ANSI SQL
    și rulează pe Linux, Windows și
    mai multe platforme Unix. Caracteristici
    concurență și performanță excelente
    & putere...
    Descărcați Firebird
  • 6
    KompoZer
    KompoZer
    KompoZer este un editor HTML wysiwyg care utilizează
    baza de cod Mozilla Composer. La fel de
    Dezvoltarea Nvu a fost oprită
    în 2005, KompoZer remediază multe erori și
    adaugă un f...
    Descărcați KompoZer
  • Mai mult »

Comenzi Linux

Ad