GoGPT Best VPN GoSearch

Favicon OnWorks

perl561delta - Online în cloud

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

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


perl561delta - ce este nou pentru perl v5.6.1

DESCRIERE


Acest document descrie diferențele dintre versiunea 5.005 și versiunea 5.6.1.

Rezumat of schimbari între 5.6.0 și 5.6.1


Această secțiune conține un rezumat al modificărilor dintre ediția 5.6.0 și 5.6.1
eliberare. Mai multe detalii despre modificările menționate aici pot fi găsite în Modificări fișiere
care însoțesc distribuția sursă Perl. Consultați perlhack pentru indicații către online
resurse unde puteți inspecta patch-urile individuale descrise de aceste modificări.

Securitate Probleme
suidperl nu va mai rula /bin/mail, deoarece unele platforme au un /bin/mail care este
vulnerabil la atacurile de depășire a tamponului.

Rețineți că suidperl nu este nici construit, nici instalat implicit în nicio versiune recentă a
perl. Utilizarea suidperl este foarte descurajată. Dacă credeți că aveți nevoie, încercați alternative
cum ar fi sudo mai întâi. Vedea http://www.courtesan.com/sudo/ .

Nucleu bug remedieri
Aceasta nu este o listă exhaustivă. Acesta este destinat să acopere numai partea semnificativă vizibilă de utilizator
schimbări.

„UNIVERSAL::isa()”
O eroare în mecanismul de stocare în cache folosit de „UNIVERSAL::isa()” care a afectat base.pm a
fost fixat. Bug-ul există încă de la versiunile 5.005, dar nu a fost gâdilat de
de bază.pm în acele versiuni.

Scurgeri de memorie
Au fost diverse cazuri de scurgeri de memorie și încercări de a accesa memoria neinițializată
vindecat. Consultați „Probleme cunoscute” de mai jos pentru alte probleme.

Conversii numerice
Conversiile numerice nu au recunoscut corect modificările valorii șirului în anumite anumite
circumstanțe.

În alte situații, numerele mari nesemnate (cele de peste 2**31) pot pierde uneori
lipsa lor de semnătură, provocând rezultate false în operații aritmetice.

Modulul întreg pe numere întregi mari fără semn a returnat uneori valori incorecte.

Perl 5.6.0 a generat avertismente „nu este un număr” pentru anumite conversii, acolo unde au fost anterior
versiunile nu au făcut-o.

Toate aceste probleme au fost remediate.

Infinitul este acum recunoscut ca număr.

qw(a\\b)
În Perl 5.6.0, qw(a\\b) a produs un șir cu două bare oblice inverse în loc de una, într-un
abatere de la comportamentul din versiunile anterioare. Comportamentul mai vechi a fost
repus.

apelant()
apelant() ar putea provoca depozite de miez în anumite situații. Crapul a fost uneori afectat de
această problemă.

Erori în expresiile regulate
Potrivirile de model pentru valorile supraîncărcate sunt acum gestionate corect.

Perl 5.6.0 a analizat m/\x{ab}/ incorect, ducând la avertismente false. Asta a fost
corectat.

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

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

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

Utilizarea $& ar putea declanșa o descărcare de bază în anumite situații. Acest lucru este acum evitat.

Variabilele de potrivire $1 și colab., nu au fost anulate atunci când o potrivire de tipar era înapoi,
iar anomalia a apărut în interiorul „/...(?{ ... }).../” etc. Aceste variabile sunt acum
urmărite corect.

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

modul „slurp”.
Citeste linia() pe fișierele deschise în modul „slurp” ar putea returna un „” suplimentar la sfârșit în
anumite situatii. Acest lucru a fost corectat.

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

Avertismente lexicale
Avertismentele lexicale se propagă acum corect în „evalul „...””.

„Utilizați avertismente qw(FATAL all)” nu a funcționat conform intenției. Acest lucru a fost corectat.

Avertismentele lexicale se pot scurge în alte domenii în unele situații. Acest lucru este acum rezolvat.

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

Avertismente false și erori
Perl 5.6.0 ar putea emite avertismente false despre redefinirea dl_error() cand
construind static extensii în perl. Acest lucru a fost corectat.

Variabilele „noastre” ar putea avea ca rezultat avertismente false „Variabila nu va rămâne partajată”. Acest
este acum fix.

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

glob()
Compatibilitatea builtin glob() cu vechiul glob bazat pe csh a fost îmbunătățit cu
adăugarea opțiunii GLOB_ALPHASORT. Vedeți „Fișier::Glob”.

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

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

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

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

fel()
Argumente la fel() nu li s-a oferit dreptul wantarray() context. The
blocul de comparație este acum rulat în context scalar, iar argumentele care trebuie sortate sunt
contextul listei furnizat întotdeauna.

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

directive #line
Directivele #line acum funcționează corect când apar chiar la începutul „eval
„...””.

Prototipuri de subrutine
Prototipul (\&) funcționează acum corect.

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

Debugger
Codul de ieșire al depanatorului reflectă acum codul de ieșire al scriptului.

Condiția „0” în punctele de întrerupere este acum tratată corect.

Comanda „d” verifică acum numărul liniei.

$. nu mai este corupt de depanator.

Toate ieșirile depanatorului merg acum corect la socket dacă RemotePort este setat.

PERL5OPT
PERL5OPT poate fi setat la mai mult de un grup de comutatoare. Anterior, era limitat
la un singur grup de opțiuni.

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

Suport Unicode
Suportul Unicode a înregistrat un număr mare de îmbunătățiri incrementale, dar continuă
fi extrem de experimental. Nu este de așteptat să fie pe deplin acceptat în versiunea 5.6.x
versiuni de întreținere.

substr(), a te alatura(), repeta(), verso(), quotemeta() și concatenarea șirurilor au fost toate
gestionarea incorectă a șirurilor Unicode în Perl 5.6.0. Acest lucru a fost corectat.

Suportul pentru „tr///CU” și „tr///UC” etc., a fost eliminat de când am realizat
interfata este stricata. Pentru o funcționalitate similară, consultați „pachet” în perlfunc.

Baza de date de caractere Unicode a fost actualizată la versiunea 3.0.1 cu adăugiri
disponibil publicului începând cu 30 august 2000.

Au fost adăugate clasele de caractere Unicode \p{Blank} și \p{SpacePerl}. „Alb” este
ca C este gol (), adică conține doar „spațiu alb orizontal” (spațiul
caracterul este, linia nouă nu), iar „SpacePerl” este echivalentul Unicode al
„\s” (\p{Spațiu} nu este, deoarece include caracterul tabulator vertical, în timp ce
„\s” nu.)

Dacă experimentați cu suportul Unicode în perl, versiunile de dezvoltare ale
Perl poate avea mai multe de oferit. În special, straturile I/O sunt acum disponibile în
pista de dezvoltare, dar nu în calea de întreținere, în primul rând pentru a face înapoi
probleme de compatibilitate. De asemenea, suportul Unicode evoluează rapid în fiecare zi
pista de dezvoltare - pista de întreținere reflectă doar cea mai conservatoare dintre
aceste schimbari.

Suport pe 64 de biți
Suportul pentru platformele pe 64 de biți a fost îmbunătățit, dar continuă să fie experimental. The
nivelul de suport variază foarte mult între platforme.

compilator
Compilatorul B și diferitele sale backend-uri au avut multe îmbunătățiri incrementale, dar
ele continuă să rămână extrem de experimentale. Utilizarea în medii de producție este
descurajat.

Instrumentul perlcc a fost rescris, astfel încât interfața cu utilizatorul să fie mult mai asemănătoare
a unui compilator C.

Instrumentele perlbc au fost eliminate. Folosiți „perlcc -B” în schimb.

Subrutine Lvalue
Au existat diverse remedieri de erori pentru a suporta mai bine subrutinele lvalue. Însă
caracteristica rămâne încă experimentală.

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

File::Find
File::Găsiți acum chdir()este corect atunci când urmăriți legăturile simbolice.

xsubpp
xsubpp tolerează acum secțiunile POD încorporate.

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

Teste
Au fost adăugate un număr mare de teste.

Nucleu caracteristici
dezlega() va apela acum un UNTIE() cârlig dacă există. Vezi perltie pentru detalii.

Comutatorul de linie de comandă „-DT” emite informații abundente de tokenizare. Vezi perlrun.

Matricele sunt acum întotdeauna interpolate în șiruri de caractere duble. Anterior, "[e-mail protejat]"
era o eroare fatală la momentul compilării, dacă nu era folosită sau declarată o matrice @bar. Acest
comportamentul de tranziție a fost menit să ajute la migrarea codului perl4 și este considerat a fi nu
mai util. Consultați „Matricele se interpolează acum întotdeauna în șiruri de caractere duble”.

chei(), fiecare(), pop (), Apăsați(), schimb(), lipitură() și unshift() toate pot fi anulate acum.

„my __PACKAGE__ $obj” face acum lucrul așteptat.

Configuraţie probleme de
Pe unele sisteme (IRIX și Solaris printre ele) malloc-ul sistemului este demonstrabil mai bun.
În timp ce valorile implicite nu au fost modificate pentru a păstra compatibilitatea binară cu
versiuni anterioare, este mai bine să construiți perl cu „Configurare -Uusemymalloc...”
după cum se discută în INSTALARE fișier.

„Configurarea” a fost îmbunătățită în diferite moduri:

· Minimizează utilizarea fișierelor temporare.

· În mod implicit, nu leagă perl cu biblioteci care nu sunt utilizate de acesta, cum ar fi diferitele dbm
biblioteci. SunOS 4.x indică păstrarea comportamentului pe platforma respectivă.

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

· Construirea în afara arborelui sursă este acceptată pe sistemele care au legături simbolice.
Acest lucru se face prin alergare

sh /cale/la/sursă/Configurare -Dmksymlinks...
instalați toate testele

într-un alt director decât directorul sursă perl. Vedea INSTALARE.

· „Configurare -S” poate fi rulat non-interactiv.

Documentație
S-au adăugat README.aix, README.solaris și README.macos. README.posix-bc a fost
redenumit în README.bs2000. Acestea sunt instalate ca perlaix, perlsolaris, perlmacos și
respectiv perlbs2000.

Următoarele documente pod sunt noi:

perlclib Înlocuitori interne pentru funcțiile standard de bibliotecă C
perldebtut Tutorial de depanare Perl
perlebcdic Considerații pentru rularea Perl pe platformele EBCDIC
perlnewmod Module Perl: pregătirea unui nou modul pentru distribuție
perlrequick Pornire rapidă a expresiilor regulate Perl
perlretut Tutorial expresii regulate Perl
utilitare perlutil împachetate cu distribuția Perl

INSTALARE fișierul a fost extins pentru a acoperi diverse probleme, cum ar fi suportul pe 64 de biți.

O listă mai lungă de colaboratori a fost adăugată la distribuția sursă. Vezi fisierul
„AUTORI”.

Au fost aduse numeroase alte modificări documentației incluse și întrebărilor frecvente.

grupate module
Au fost adăugate următoarele module.

B::Concis
Urmează arborele de sintaxă Perl, imprimând informații concise despre operațiuni. Vezi B::Concis.

Fișier::Temp
Returnează numele și mânerul unui fișier temporar în siguranță. Vezi File::Temp.

Pod::LaTeX
Convertește datele Pod în LaTeX formatat. Vezi Pod::LaTeX.

Pod::Text::Overstrike
Convertește datele POD în text de depășire formatat. Vezi Pod::Text::Overstrike.

Următoarele module au fost actualizate.

CGI CGI v2.752 este acum inclus.

CPAN
CPAN v1.59_54 este acum inclus.

Clasa::Struct
Au fost adăugate diverse remedieri de erori.

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

Devel::Peek
Devel::Peek a fost îmbunătățit pentru a suporta descărcarea statisticilor de memorie, atunci când Perl este
construit cu cele incluse malloc ().

File::Find
File::Find acceptă acum pre și post-procesare a fișierelor pentru a fel() lor,
etc

Getopt::Lung
Getopt::Long v2.25 este inclus.

IO::Sondaj
Au fost incluse diverse remedieri de erori.

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

Matematică::BigFloat
fmod() funcția acceptă operații cu modul. Au fost, de asemenea, remediate diverse erori
inclus.

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

Net::Ping
ping() ar putea eșua pe un număr impar de octeți de date și atunci când serviciul echo nu este
alergare. Acest lucru a fost corectat.

opcode
O scurgere de memorie a fost remediată.

Pod::Parser
Este inclusă versiunea 1.13 a suitei Pod::Parser.

Pod::Text
Pod::Text și modulele aferente au fost actualizate la versiunile din suita podlators
v2.08.

SDBM_File
Pe platformele dosish, unele chei au dispărut din cauza lipsei de suport pentru fișierele cu
„găuri”. A fost adăugată o soluție pentru problema.

Sys::Syslog
Au fost incluse diverse remedieri de erori.

Tie::RefHash
Acum acceptă Tie::RefHash::Nestable pentru a lega automat valorile hashref.

Tie::SubstrHash
Au fost incluse diverse remedieri de erori.

Specific platformei îmbunătățiri
Următoarele porturi noi sunt acum disponibile.

NCR MP-RAS
NonStop-UX

Perl acum construiește sub Amdahl UTS.

Perl a fost, de asemenea, verificat pentru a fi construit sub Amiga OS.

Suportul pentru EPOC a fost mult îmbunătățit. Vezi README.epoc.

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

Dublele lungi ar trebui să funcționeze acum sub Linux.

Mac OS Classic este acum acceptat în pachetul sursă mainstream. Vezi README.macos.

Suportul pentru MPE/iX a fost actualizat. Vezi README.mpeix.

Suportul pentru OS/2 a fost îmbunătățit. Consultați „os2/Changes” și README.os2.

Încărcarea dinamică pe z/OS (fostul OS/390) a fost îmbunătățită. Consultați README.os390.

Suportul pentru VMS a înregistrat multe îmbunătățiri progresive, inclusiv un suport mai bun pentru
operatorii ca backticks și sistem(), și o mai bună manipulare %ENV. Vedeți „README.vms” și
perlvms.

Suportul pentru Stratus VOS a fost îmbunătățit. Vedeți „vos/Changes” și README.vos.

Suportul pentru Windows a fost îmbunătățit.

· furculiţă() emularea a fost îmbunătățită în diferite moduri, dar continuă să fie
experimental. Consultați perlfork pentru erori cunoscute și avertismente.

· %SIG a fost activat sub USE_ITHREADS, dar utilizarea sa este complet neacceptată sub
toate configurațiile.

· Borland C++ v5.5 este acum un compilator acceptat care poate construi Perl. Însă
binarele generate continuă să fie incompatibile cu cele generate de celălalt
compilatoare acceptate (GCC și Visual C++).

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

· O scurgere de memorie Accept() a fost fixat.

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

· Noile intrări %ENV în urmă nu au fost propagate către procesele copil. Acest lucru este acum rezolvat.

· Intrările curente din directorul %ENV sunt acum propagate corect către procesele copil.

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

· Makefile-urile oferă acum un singur comutator pentru a activa în bloc toate funcțiile activate
ActiveState ActivePerl (o distribuție binară populară).

· Win32::GetCwd() returnează corect C:\ în loc de C: când se află la rădăcina unității. Alte
bug-uri in chdir() și Cwd::cwd() au fost de asemenea reparate.

· furculiţă() returnează corect undef și setează EAGAIN când rămâne fără pseudo-proces
mânere.

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

· Gestionarea căilor UNC este mai bună atunci când perl este construit pentru a suporta furculiţă().

· S-a remediat o scurgere la mâner în manipularea prizei.

· trimite() funcționează din interiorul unui pseudo-proces.

Cu excepția cazului în care se califică în mod specific altfel, restul acestui document acoperă modificări
între versiunile 5.005 și 5.6.0.

Nucleu Îmbunătățiri


Interpret clonarea, fire, și concurență
Perl 5.6.0 introduce începuturile suportului pentru rularea mai multor interpreți
concomitent în fire diferite. În legătură cu perl_clone() apel API, care
poate fi folosit pentru a duplica selectiv starea oricărui interpret dat, este posibil să
compilați o bucată de cod o dată într-un interpret, clonați acel interpret o dată sau de mai multe ori,
și rulați toți interpreții rezultate în fire distincte.

Pe platforma Windows, această caracteristică este folosită pentru a emula furculiţă() la nivel de interpret.
Consultați perlfork pentru detalii despre asta.

Această caracteristică este încă în evoluție. În cele din urmă, este menit să fie folosit în mod selectiv
clonează o subrutină și date accesibile din acea subrutină într-un interpret separat și
rulați subrutina clonată într-un fir separat. Deoarece nu există date partajate între
interpreți, va fi nevoie de puțină blocare sau deloc (cu excepția cazului în care părți din tabelul de simboluri sunt
partajate în mod explicit). Acesta este, evident, menit să fie un înlocuitor ușor de utilizat pentru
suport pentru fire existente.

Suportul pentru clonarea interpreților și concurența interpretului poate fi activat folosind
-Dusethreads Configurare opțiunea (consultați win32/Makefile pentru cum să o activați pe Windows.)
executabilul perl rezultat va fi identic din punct de vedere funcțional cu cel cu care a fost construit
-Dmultiplicitatea, dar cel perl_clone() Apelul API va fi disponibil numai în primul.

-Dusethreads activează macro-ul cpp USE_ITHREADS în mod implicit, care la rândul său activează Perl
modificări ale codului sursă care asigură o separare clară între arborele operațional și datele acestuia
opereaza cu. Primul este imuabil și, prin urmare, poate fi împărțit între un
interpret și toate clonele sale, în timp ce acestea din urmă sunt considerate locale pentru fiecare
interpret și, prin urmare, este copiat pentru fiecare clonă.

Rețineți că construirea Perl cu opțiunea -Dusemultiplicity Configure este adecvată dacă dvs
doresc să ruleze mai multe independent interpreți concomitent în diferite fire.
-Dusethreads oferă doar funcționalitatea suplimentară a perl_clone() apel API și
alt suport pentru alergare clonat interpreți concomitent.

NOTĂ: Aceasta este o caracteristică experimentală. Detaliile de implementare sunt
pot fi modificate.

Lexical scoped de avertizare categorii
Acum puteți controla granularitatea avertismentelor emise de perl la un nivel mai fin folosind
pragma „utilizați avertismente”. warnings și perllexwarn au o documentație copioasă în acest sens
caracteristică.

Unicode și UTF-8 a sustine
Perl folosește acum UTF-8 ca reprezentare internă pentru șirurile de caractere. „utf8” și
Pragmele „octeți” sunt folosite pentru a controla acest suport în domeniul lexical actual. Vedea
perlunicode, utf8 și octeți pentru mai multe informații.

Se așteaptă ca această caracteristică să evolueze rapid pentru a sprijini o anumită formă de discipline I/O care
poate fi folosit pentru a specifica tipul de date de intrare și de ieșire (octeți sau caractere). Pana cand
asta se întâmplă, vor fi necesare module suplimentare de la CPAN pentru a completa setul de instrumente pentru
se ocupă cu Unicode.

NOTĂ: Aceasta ar trebui considerată o caracteristică experimentală. Implementarea
detaliile pot fi modificate.

Asistență pentru interpolare numit caractere
Noul escape „\N” interpolează caracterele numite în șiruri. De exemplu, „Bună!
\N{CHIPĂ ZÂMBĂ ALBĂ}" se evaluează ca un șir cu o față zâmbitoare Unicode la sfârșit.

"al nostru" declarații
O declarație „noastre” introduce o valoare care poate fi cel mai bine înțeleasă ca un scop lexical
alias simbolic la o variabilă globală din pachet care era curentă acolo unde se afla variabila
declarat. Acest lucru este util în mare parte ca alternativă la pragma „vars”, dar oferă și
posibilitatea de a introduce tastarea și alte atribute pentru astfel de variabile. Vezi „nostru” în
perlfunc.

Asistență pentru siruri reprezentate as a vector of ordinale
Literalele de forma „v1.2.3.4” sunt acum analizate ca un șir compus din caractere cu
ordinale specificate. Aceasta este o modalitate alternativă, mai lizibilă de a construi (eventual
șiruri Unicode) în loc de interpolarea caracterelor, ca în „\x{1}\x{2}\x{3}\x{4}”. The
„v” de început poate fi omis dacă există mai mult de două ordinale, deci 1.2.3 este analizat
la fel ca „v1.2.3”.

Șirurile scrise în această formă sunt, de asemenea, utile pentru a reprezenta versiunea „numerelor”. Este ușor
pentru a compara astfel de versiuni „numere” (care sunt de fapt doar șiruri simple) folosind oricare dintre
operatori obișnuiți de comparare a șirurilor de caractere „eq”, „ne”, „lt”, „gt”, etc. sau efectuează șir de caractere pe biți
operațiuni asupra lor folosind „|”, „&”, etc.

În combinație cu noua variabilă magică $^V (care conține versiunea perl ca a
șir), astfel de literale pot fi folosite ca o modalitate lizibilă de a verifica dacă executați un
o anumită versiune de Perl:

# aceasta va analiza și în versiunile mai vechi de Perl
dacă ($^V și $^V gt v5.6.0) {
# funcții noi acceptate
}

„necesită” și „utilizare” au, de asemenea, o magie specială pentru a sprijini astfel de literale. Acestea vor fi
interpretat ca o versiune mai degrabă decât ca un nume de modul:

necesită v5.6.0; # croak if $^V lt v5.6.0
utilizați v5.6.0; # la fel, dar croaks la compilare

Alternativ, „v” poate fi omis dacă există mai mult de un punct:

necesită 5.6.0;
utilizați 5.6.0;

De asemenea, „sprintf” și „printf” acceptă indicatorul de format specific Perl %v pentru a imprima ordinale ale
caractere în șiruri arbitrare:

printf "v%vd", $^V; # imprimă versiunea curentă, cum ar fi „v5.5.650”
printf "%*vX", ":", $addr; # formatează adresa IPv6
printf "%*vb", " ", $biți; # afișează șirul de biți

Consultați „Constructori de valori scalare” în perldata pentru informații suplimentare.

Îmbunătățit Perl versiune numerotare sistem
Începând cu versiunea Perl 5.6.0, convenția privind numărul versiunii a fost schimbată în a
Schema „întregi cu puncte” care se găsește mai frecvent în proiectele open source.

Versiunile de întreținere ale v5.6.0 vor fi lansate ca v5.6.1, v5.6.2 etc. Următorul
seria de dezvoltare care urmează v5.6.0 va fi numerotată v5.7.x, începând cu v5.7.0 și
următoarea lansare majoră de producție după v5.6.0 va fi v5.8.0.

Modulul engleză setează acum $PERL_VERSION la $^V (o valoare șir) și nu $] (a
valoare numerica). (Aceasta este o potențială incompatibilitate. Trimiteți-ne un raport prin perlbug dacă
ești afectat de asta.)

Sintaxa v1.2.3 este acum legală și în Perl. Consultați „Suport pentru șiruri reprezentate ca a
vector de ordinale" pentru mai multe despre asta.

Pentru a face față utilizării de către noul sistem de versiuni a cel puțin trei cifre semnificative pentru fiecare
componentă versiune, metoda utilizată pentru creșterea numărului de subversiune s-a schimbat și ea
puțin. Presupunem că versiunile mai vechi decât v5.6.0 au crescut subversiunea
componenta în multipli de 10. Versiunile după v5.6.0 le vor incrementa cu 1. Astfel,
folosind noua notație, 5.005_03 este „la fel” cu v5.5.30 și prima întreținere
versiunea care urmează v5.6.0 va fi v5.6.1 (care ar trebui citită ca fiind echivalentă cu un
valoare în virgulă mobilă de 5.006_001 în formatul mai vechi, stocat în $]).

Nou sintaxă pentru declararea subrutină atribute
Anterior, dacă doreai să marcați o subrutină ca fiind un apel de metodă sau ca necesită un
automat Lacăt() când este introdus, trebuia să declari că cu pragma „use attrs” în
corpul subrutinei. Acest lucru poate fi realizat acum cu sintaxa declarației, cum ar fi
acest:

sub mymethod : metoda blocată;
...
sub mymethod: metoda blocată {
...
}

sub altă metodă :blocat :metodă;
...
sub altă metodă :blocat :metodă {
...
}

(Rețineți că numai primul „:” este obligatoriu, iar spațiile albe din jurul „:” sunt
opțional.)

AutoSplit.pm și SelfLoader.pm au fost actualizate pentru a păstra atributele cu stub-urile
ei furnizeaza. Vezi atribute.

Fișier și director mânere poate să be autovivificat
Similar cu modul în care constructele precum „$x->[0]” autovivifică o referință, gestionează constructorii
(deschis(), opendir(), teava(), pereche de prize(), sysopen(), priză () și Accept()) acum
autovivify un fișier sau un mâner de director dacă mânerul transmis acestora este neinițializat
variabilă scalară. Acest lucru permite constructe precum „open(my $fh, ...)” și „open(local
$fh,...)" pentru a fi folosit pentru a crea filehandle care vor fi închise automat
când domeniul de aplicare se termină, cu condiția să nu existe alte referințe la acestea. Aceasta în mare măsură
elimină nevoia de tip glob la deschiderea filehandlelor care trebuie să fie transmise, cum ar fi
în exemplul următor:

sub myopen {
deschide-mi $fh, „@_”
sau die „Nu se poate deschide „@_”: $!”;
returnează $fh;
}

{
my $f = myopen("
imprima <$f>;
# $f implicit închis aici
}

deschis() implementate cu mai mult decât Două argumente
If deschis() primesc trei argumente în loc de două, al doilea argument este folosit ca
modul și al treilea argument este considerat numele fișierului. Acest lucru este util în primul rând pentru
protejarea împotriva comportamentului magic neintenționat al formei tradiționale cu două argumente. Vedea
„deschis” în perlfunc.

64-bit a sustine
Orice platformă care are numere întregi pe 64 de biți

(1) nativ ca lungi sau int
(2) prin steaguri speciale ale compilatorului
(3) folosind long long sau int64_t

este capabil să utilizeze „quads” (întregi pe 64 de biți) după cum urmează:

· constante (zecimale, hexazecimale, octale, binare) din cod

· argumente la oct() și hex()

· argumente la imprimare(), printf() și sprintf() (prefixele steagului ll, L, q)

· imprimat ca atare

· ambalaj() și despacheta() formatele „q” și „Q”.

· in aritmetica de baza: + - * / % (NOTA: functioneaza aproape de limitele intregului
valorile pot produce rezultate surprinzătoare)

· în aritmetică de biți: & | ^ ~ << >> (NOTĂ: acestea erau forțate să aibă o lățime de 32 de biți
dar acum operează pe toată lățimea nativă.)

· vec()

Rețineți că, dacă nu aveți cazul (a), va trebui să configurați și să compilați Perl folosind
indicatorul -Duse64bitint Configurare.

NOTĂ: Indicatoarele Configurare -Duselonglong și -Duse64bits au fost
depreciat. Folosiți -Duse64bitint în schimb.

Există de fapt două moduri de 64 de biți: primul este realizat folosind Configurare
-Duse64bitint și al doilea folosind Configure -Duse64bitall. Diferența este că
primul este minim iar al doilea maxim. Primul lucrează în mai multe locuri decât
al doilea.

„Use64bitint” face doar atât cât este necesar pentru a introduce numere întregi pe 64 de biți în Perl (acest
poate însemna, de exemplu, folosirea „lungirilor lungi”) în timp ce memoria dvs. poate fi încă limitată la 2
gigaocteți (deoarece pointerii dvs. ar putea fi încă pe 32 de biți). Rețineți că numele „64bitint”
nu implică faptul că compilatorul dvs. C va folosi „int” pe 64 de biți (ar putea, dar nu
trebuie să): „use64bitint” înseamnă că veți putea avea un scalar lat de 64 de biți
valori.

„Use64bitall” merge până la capăt încercând să schimbe și numerele întregi (dacă se poate),
tânjește (și indică) să fie pe 64 de biți. Acest lucru poate crea un incompatibil și mai binar
Perl decât -Duse64bitint: executabilul rezultat poate să nu ruleze deloc într-o casetă de 32 de biți sau
poate fi necesar să reporniți/reconfigurați/reconstruiți sistemul de operare pentru a fi conștient de 64 de biți.

Sistemele native pe 64 de biți precum Alpha și Cray nu au nevoie nici de -Duse64bitint, nici de -Duse64bitall.

Nu în ultimul rând: rețineți că, datorită obiceiului lui Perl de a folosi întotdeauna numere în virgulă mobilă,
quadurile încă nu sunt numere întregi adevărate. Când quad-urile își depășesc limitele
(0...18_446_744_073_709_551_615 unsigned,
-9_223_372_036_854_775_808...9_223_372_036_854_775_807 signed), they are silently promoted
la numere în virgulă mobilă, după care vor începe să piardă din precizie (în partea lor inferioară
cifre).

NOTĂ: suportul pe 64 de biți este încă experimental pe majoritatea platformelor.
Suportul existent acoperă doar modelul de date LP64. În special, cel
Modelul de date LLP64 nu este încă acceptat. Biblioteci și sistem pe 64 de biți
API-urile de pe multe platforme nu s-au stabilizat - kilometrajul dvs. poate varia.

Mare fişier a sustine
Dacă aveți sisteme de fișiere care acceptă „fișiere mari” (fișiere mai mari de 2 gigaocteți), dvs
ar putea acum să le creeze și să le acceseze din Perl.

NOTĂ: Acțiunea implicită este de a activa suportul pentru fișiere mari, dacă
disponibil pe platformă.

Dacă suportul pentru fișiere mari este activat și aveți o constantă Fcntl O_LARGEFILE,
O_LARGEFILE este adăugat automat la steagurile de sysopen().

Atenție că, dacă sistemul dvs. de fișiere nu acceptă, de asemenea, „fișiere rare” care caută să se extindă
petabytes pot fi nerecomandati.

Rețineți că, pe lângă necesitatea unui sistem de fișiere adecvat pentru a face fișiere mari, puteți, de asemenea
trebuie să vă ajustați per-proces (sau per-sistem, sau per-proces-group, sau per-user-
grup) limitele maxime de dimensiune a fișierelor înainte de a rula scripturi Perl care încearcă să gestioneze fișiere mari,
mai ales dacă intenționați să scrieți astfel de fișiere.

În cele din urmă, pe lângă limitele de dimensiune maximă a fișierelor de proces/grup de procese, este posibil să aveți
limitele de cotă pentru sistemele dvs. de fișiere care vă împiedică (ID-ul dvs. de utilizator sau ID-ul grupului dvs. de utilizatori).
folosind fișiere mari.

Ajustarea limitelor de proces/utilizator/grup/sistem de fișiere/sistem de operare este în afara domeniului de aplicare
a limbajului de bază Perl. Pentru limitele de proces, puteți încerca să creșteți limitele folosind dvs
comanda limits/limit/ulimit a shell-ului înainte de a rula Perl. Extensia BSD::Resource (nu
inclus cu distribuția standard Perl) poate fi, de asemenea, de folos, oferă
interfață getrlimit/setrlimit care poate fi utilizată pentru a ajusta limitele de utilizare a resurselor de proces,
inclusiv limita maximă de dimensiune a fișierelor.

Lung duble
În unele sisteme, este posibil să puteți utiliza duble lungi pentru a îmbunătăți raza și precizia
numerele tale cu virgulă mobilă cu precizie dublă (adică numerele lui Perl). Utilizați Configurare
-Duselongdouble pentru a activa acest suport (dacă este disponibil).

"Mai mult biți"
Puteți „Configura -Dusemorebits” pentru a activa atât suportul pe 64 de biți, cât și cel lung dublu
sprijini.

pachet plus a sustine pentru fel() subrutine
Subrutinele Perl cu un prototip de „($$)”, și XSUB-urile în general, pot fi acum folosite ca sortare
subrutine. În ambele cazuri, cele două elemente care trebuie comparate sunt trecute ca în mod normal
parametrii în @_. Vezi „sortare” în perlfunc.

Pentru subrutinele de sortare neprototipate, comportamentul istoric de trecere a elementelor să fie
comparativ cu variabilele globale $a și $b rămân neschimbate.

"fel $coderef @foo" permis
fel() nu a acceptat o referință de subrutină ca funcție de comparație din mai devreme
versiuni. Acest lucru este acum permis.

Fișier globulare implementat intern
Perl folosește acum implementarea File::Glob a programului glob() operator automat. Acest
evită utilizarea unui proces extern csh și problemele asociate acestuia.

NOTĂ: Aceasta este în prezent o caracteristică experimentală. Interfețe și
implementarea sunt supuse modificării.

Asistență pentru VERIFICA blocuri
Pe lângă „BEGIN”, „INIT”, „END”, „DISTRUGERE” și „AUTLOAD”, subrutinele numite „CHECK”
sunt acum speciale. Acestea sunt puse în coadă în timpul compilării și se comportă similar cu blocurile END,
cu excepția faptului că sunt apelate la sfârșitul compilației, mai degrabă decât la sfârșitul execuției.
Ei nu pot fi apelați direct.

POSIX caracter clasă sintaxă [: :] sprijinite
De exemplu, pentru a potrivi caracterele alfabetice, utilizați /[[:alpha:]]/. Vezi perlre pentru detalii.

Mai bine pseudo-aleatorie număr generator
În 5.005_0x și anterioare, perl's rand() funcția a folosit biblioteca C rand(3) funcția. La fel de
din 5.005_52, Configurați teste pentru drand48(), Aleatoriu() și rand() (în această ordine) și alege
primul pe care îl găsește.

Aceste modificări ar trebui să aibă ca rezultat numere aleatorii mai bune din rand().

Îmbunătățit "qw//" operator
Operatorul „qw//” este acum evaluat în momentul compilării într-o listă adevărată în loc să fie
înlocuit cu un apel de rulare la „split()”. Acest lucru înlătură comportamentul greșit confuz al
„qw//” în context scalar, care a moștenit acel comportament de la Despică().

Prin urmare:

$foo = ($bar) = qw(abc); printează „$foo|$bar\n”;

acum tipărește corect „3|a”, în loc de „2|a”.

Mai bine cel mai rău caz comportament of hashuri
Au fost implementate mici modificări ale algoritmului de hashing pentru a îmbunătăți
distribuția biților de ordin inferior în valoarea hashed. Se așteaptă ca acest lucru să dea mai bine
performanță pe taste care sunt secvențe repetate.

ambalaj() format „Z” sprijinite
Noul format de tip „Z” este util pentru împachetarea și despachetarea șirurilor terminate cu nul. Vedea
„pachet” în perlfunc.

ambalaj() format schimbare '!' sprijinite
Noul modificator de tip de format „!” este util pentru împachetarea și despachetarea pantalonilor nativi, int,
si tanjeste. Vezi „pachet” în perlfunc.

ambalaj() și despacheta() a sustine numărat siruri
Caracterul șablon „/” poate fi folosit pentru a specifica un tip de șir numărat care trebuie împachetat sau
despachetat. Vezi „pachet” în perlfunc.

Comentarii in ambalaj() şabloane
Caracterul „#” dintr-un șablon introduce un comentariu până la sfârșitul rândului. Acest
facilitează documentarea ambalaj() template-uri.

Slab referințe
În versiunile anterioare de Perl, nu puteai stoca în cache obiectele pentru a le permite să fie șterse
dacă ultima referință din afara cache-ului este ștearsă. Referința din cache ar fi
țineți un număr de referințe asupra obiectului și obiectele nu vor fi niciodată distruse.

O altă problemă familiară este referințele circulare. Când un obiect se referă la el însuși,
Numărul său de referință nu va scădea niciodată la zero și nu va fi distrus până la
programul este pe cale să iasă.

Referințele slabe rezolvă acest lucru permițându-vă să „slăbiți” orice referință, adică să nu o faceți
numărați pentru numărul de referință. Când ultima referință neslabă la un obiect este
șters, obiectul este distrus și toate referințele slabe la obiect sunt
automat undef-ed.

Pentru a utiliza această caracteristică, aveți nevoie de pachetul Devel::WeakRef de la CPAN, care conține
documentație suplimentară.

NOTĂ: Aceasta este o caracteristică experimentală. Detaliile pot fi modificate.

Binar numere sprijinite
Numerele binare sunt acum acceptate ca literale, în formatele s?printf și „oct()”:

$răspuns = 0b101010;
printf "Răspunsul este: %b\n", oct("0b101010");

Lvalue subrutine
Subrutinele pot returna acum valori l modificabile. Vezi „subrutine Lvalue” în perlsub.

NOTĂ: Aceasta este o caracteristică experimentală. Detaliile pot fi modificate.

niste săgeţi Mai be omis in Apeluri prin referințe
Perl permite acum omiterea săgeții în multe constructe care implică apeluri de subrutine
prin referințe. De exemplu, „$foo[10]->(‘foo’)” poate fi acum scris
„$foo[10](‘foo’)”. Acest lucru este destul de similar cu modul în care poate fi omisă săgeata
„$foo[10]->{'foo'}”. Rețineți totuși că săgeata este încă necesară pentru
"foo(10)->('bara')".

boolean cesiune Operatorii sunt legal lvalorile
Construcțiile precum „($a ||= 2) += 1” sunt acum permise.

exista() is sprijinite on subrutină nume
exista() builtin funcționează acum pe nume de subrutine. Se consideră că există o subrutină
dacă a fost declarat (chiar dacă implicit). Consultați „există” în perlfunc pentru exemple.

exista() și șterge() sunt sprijinite on mulțime element
exista() și șterge() modulele interne funcționează acum și pe matrice simple. Comportamentul este
similar cu cel de pe elementele hash.

exista() poate fi folosit pentru a verifica dacă un element de matrice a fost inițializat. Acest lucru evită
elemente de matrice autovivifying care nu există. Dacă matricea este legată, EXISTĂ() metodă
în pachetul legat corespunzător va fi invocat.

șterge() poate fi folosit pentru a elimina un element din matrice și a-l returna. Elementul de matrice
în acea poziție revine la starea neinițializată, astfel încât testarea pentru același element
implementate cu exista() va reveni fals. Dacă elementul se întâmplă să fie cel de la sfârșit,
dimensiunea matricei se micșorează, de asemenea, la cel mai înalt element pentru care se testează adevărat exista(),
0 dacă nu se găsește niciun astfel de lucru. Dacă matricea este legată, ȘTERGE() metoda în corespunzătoare
pachet legat va fi invocat.

Vedeți „există” în perlfunc și „șterge” în perlfunc pentru exemple.

Pseudo-hash-uri muncă mai bine
Dereferentarea unor tipuri de valori de referință într-un pseudo-hash, cum ar fi „$ph->{foo}[1]”,
a fost interzis accidental. Acest lucru a fost corectat.

Când se aplică unui element pseudo-hash, exista() acum raportează dacă valoarea specificată
există, nu doar dacă cheia este validă.

șterge() acum funcționează pe pseudo-hash-uri. Când i se oferă un element pseudo-hash sau o felie, acesta se șterge
valorile corespunzătoare cheilor (dar nu și cheilor în sine). Vedeți „Pseudo-hash-uri:
Folosind o matrice ca hash" în perlref.

Secțiunile pseudo-hash cu chei constante sunt acum optimizate pentru căutări de matrice în timpul compilării.

Atribuțiile de listă pentru secțiunile pseudo-hash sunt acum acceptate.

Pragma „câmpuri” oferă acum modalități de a crea pseudo-hash-uri, prin fields::new() și
fields::phash(). Vezi câmpuri.

NOTĂ: Tipul de date pseudo-hash continuă să fie experimental.
Limitându-se la elementele de interfață oferite de
pragma câmpurilor va oferi protecție împotriva oricăror schimbări viitoare.

Automat înroșirea feței of producție tampoane
furculiţă(), exec(), sistem(), qx// și conductă deschis()Acum șterge buffer-urile tuturor fișierelor deschise pentru
ieșire când a fost încercată operația. Acest lucru elimină în mare parte bufferingul confuz
accidente suferite de utilizatori care nu cunosc modul în care Perl gestionează intern I/O.

Acest lucru nu este acceptat pe unele platforme precum Solaris, unde este corect corect
implementarea fflush(NULL) nu este disponibilă.

Mai bine diagnostic on fără sens mâner de fișier operațiuni
Construcții precum „open( )" și "închide( )" sunt erori de timp de compilare. Se încearcă
citite din handlere de fișiere care au fost deschise doar pentru scriere vor produce acum avertismente (la fel ca
scrierea în manere de fișiere numai pentru citire nu).

Unde posibil, tamponat de date aruncată de la păcălit intrare mâner de fișier
„open(NEW, „<&OLD”)” încearcă acum să renunțe la orice date care au fost citite anterior și
tamponat în „OLD” înainte de a înșela mânerul. Pe platformele unde acest lucru este permis,
următoarea operație de citire pe „NEW” va returna aceleași date ca și operația corespunzătoare de pe
"VECHI". Anterior, ar fi returnat datele de la începutul următorului disc
în schimb blocați.

eof() are il acelaşi vechi magie as <>
„eof()” ar returna adevărat dacă nu s-ar fi făcut încă nicio încercare de a citi din „<>”. „eof()” are
a fost schimbat pentru a avea un pic de magie proprie, acum deschide fișierele „<>”.

binmode() poate să be utilizat la set :crlf și :brut moduri de
binmode() acum acceptă un al doilea argument care specifică o disciplină pentru mâner în
întrebare. Cele două pseudo-discipline „:raw” și „:crlf” sunt suportate în prezent pe DOS-
platforme derivate. Vedeți „binmode” în perlfunc și deschideți.

"-T" Filetest recunoaște UTF-8 codificat fișiere as "text"
Algoritmul utilizat pentru testul de fișiere „-T” a fost îmbunătățit pentru a identifica corect UTF-8
conținut ca „text”.

sistem(), backticks și ţeavă deschide acum reflecta exec() eşec
Pe Unix și platforme similare, sistem(), qx() și open(FOO, "cmd |") etc., sunt implementate
de furculiţă() și exec(). Când subiacentul exec() eșuează, versiunile anterioare nu au raportat
eroarea în mod corespunzător, deoarece exec() s-a întâmplat să fie într-un proces diferit.

Procesul copil comunică acum cu părintele despre eroarea la lansarea fișierului
comandă externă, care permite acestor constructe să revină cu valoarea lor obișnuită de eroare și
set $!.

Îmbunătățit diagnostic
Numerele liniilor nu mai sunt suprimate (în circumstanțe cele mai probabile) în timpul global
faza de distrugere.

Diagnosticele emise de codul care rulează în fire altele decât firul principal sunt acum
însoțit de ID-ul firului.

Caracterele nule încorporate în diagnosticare apar acum de fapt. Obișnuiau să trunchieze
mesaj în versiunile anterioare.

$foo::a și $foo::b sunt acum scutiți de avertismentele „posibile greșeli de scriere” numai dacă fel() is
întâlnit în pachetul „foo”.

Evadările alfabetice nerecunoscute întâlnite la analizarea constructelor citate generează acum a
avertisment, deoarece acestea pot prelua o nouă semantică în versiunile ulterioare de Perl.

Multe diagnostice raportează acum funcționarea internă în care a fost provocată avertismentul, cum ar fi
Soare:

Utilizarea valorii neinițializate în concatenarea (.) la (evalul 1) rândul 1.
Utilizarea valorii neinițializate în tipărire la (evalul 1) rândul 1.

Diagnosticele care apar în cadrul eval pot raporta, de asemenea, fișierul și numărul liniei în care se află
eval este localizat, în plus față de numărul de secvență eval și numărul de linie din interiorul
textul evaluat în sine. De exemplu:

Nu sunt suficiente argumente pentru scalar la (eval 4)[newlib/perl5db.pl:1411] linia 2, la EOF

Diagnostics urma Stderr
Ieșirea de diagnosticare merge acum la orice fișier spre care indică mânerul „STDERR”, în schimb
de a merge întotdeauna la „stderr” al bibliotecii de rulare C subiacente.

Mai Mult consistent aproape pe exec comportament
Pe sistemele care acceptă un flag close-on-exec pe filehandle, marcajul este acum setat pentru oricare
mânere create de teava(), pereche de prize(), priză () și Accept(), dacă acest lucru este garantat de
valoarea $^F care poate fi în vigoare. Versiunile anterioare au neglijat să seteze steag pentru
manere create cu acești operatori. Vezi „pipe” în perlfunc, „socketpair” în perlfunc,
„socket” în perlfunc, „accept” în perlfunc și „$^F” în perlvar.

syswrite() ușurință în utilizare
Argumentul de lungime al lui „syswrite()” a devenit opțional.

Mai bine sintaxă verificări on parantezat unar Operatorii
Expresii precum:

print defined(&foo,&bar,&baz);
print uc("foo","bar","baz");
undef($foo,&bar);

obișnuia să fie permis accidental în versiunile anterioare și producea un comportament imprevizibil.
Unele au produs avertismente auxiliare atunci când sunt utilizate în acest mod; alții au greșit în tăcere
lucru.

Formele între paranteze ale majorității operatorilor unari care așteaptă un singur argument asigură acum
că nu sunt apelate cu mai mult de un argument, făcând cazurile prezentate mai sus sintaxă
erori. Comportamentul obișnuit al:

tipăriți definite de &foo, &bar, &baz;
print uc "foo", "bar", "baz";
undef $foo, &bar;

ramane neschimbat. Vezi perlop.

Pic Operatorii a sustine Complet nativ întreg lățime
Operatorii de biți (& | ^ ~ << >>) operează acum pe toată lățimea integrală nativă (exact
a cărui dimensiune este disponibilă în $Config{ivsize}). De exemplu, dacă platforma dvs. este oricare
nativ pe 64 de biți sau dacă Perl a fost configurat să utilizeze numere întregi pe 64 de biți, aceste operațiuni
se aplică la 8 octeți (spre deosebire de 4 octeți pe platformele pe 32 de biți). Pentru portabilitate, asigurați-vă că
mascați biții în exces în rezultatul „~”, de exemplu, „~$x & 0xffffffff”.

Îmbunătățit securitate caracteristici
Operațiunile mai potențial nesigure le afectează rezultatele pentru o securitate îmbunătățită.

Câmpurile „passwd” și „shell” returnate de getpwent(), getpwnam() și getpwuid() sunt
acum contaminat, deoarece utilizatorul își poate afecta propria parolă criptată și shell-ul de conectare.

Variabila modificată de shmread(), și mesajele returnate de msgrcv() (și obiectul său-
interfața orientată IPC::SysV::Msg::rcv) sunt, de asemenea, contaminate, deoarece alte
procesele pot modifica mesajele și segmentele de memorie partajată pentru propriile lor scopuri nefaste.

Mai Mult funcțional cuvânt gol prototip (*)
Prototipurile Bareword au fost raționalizate pentru a le permite să fie folosite pentru a suprascrie elementele încorporate
care acceptă cuvintele goale și le interpretează într-un mod special, cum ar fi „cere” sau „face”.

Argumentele prototipate ca „*” vor fi acum vizibile în subrutină fie ca simple
scalar sau ca referință la un typeglob. Vezi „Prototipuri” în perlsub.

"cere" și "do" Mai be suprascris
Operațiunile „cerere” și „efectuați „fișier”” pot fi suprascrise la nivel local prin importul subrutinelor de
același nume în pachetul curent (sau la nivel global importându-le în
CORE::GLOBAL:: namespace). Suprascrierea „necesită” va afecta și „utilizarea”, cu condiția ca
override este vizibilă în timpul compilării. Consultați „Suprascrierea funcțiilor încorporate” în perlsub.

$^X variabile Mai acum avea nume mai lung decât unu caracter
Anterior, $^X era sinonim cu ${"\cX"}, dar $^XY a fost o eroare de sintaxă. Acum variabil
numele care încep cu un caracter de control pot fi arbitrar lungi. Cu toate acestea, pentru
motive de compatibilitate, aceste variabile trebuie să: să fie scris cu acolade explicite, ca „${^XY}”
de exemplu. „${^XYZ}” este sinonim cu ${"\cXYZ"}. Nume de variabile cu mai multe
caracterul de control, cum ar fi „${^XY^Z}”, sunt ilegale.

Vechea sintaxă nu s-a schimbat. Ca și înainte, „^X” poate fi fie un control-X literal
caracterul sau secvența de două caractere „caret” plus „X”. Când bretele sunt omise,
numele variabilei se oprește după caracterul de control. Astfel, „$^XYZ” continuă să fie sinonim
cu „$^X . „YZ”” ca înainte.

Ca și înainte, este posibil ca variabilele lexicale să nu aibă nume care încep cu caractere de control. La fel de
înainte, variabilele ale căror nume încep cu un caracter de control sunt întotdeauna forțate să apară
pachet `principal'. Toate aceste variabile sunt rezervate pentru extensiile viitoare, cu excepția celor care
începe cu „^_”, care poate fi folosit de programele utilizatorului și se garantează că nu va achiziționa
semnificație specială în orice versiune viitoare de Perl.

Nou variabil $^C reflectă "-c" comuta
$^C are o valoare booleană care reflectă dacă perl este rulat în modul doar compilare (de ex
prin comutatorul „-c”). Deoarece blocurile BEGIN sunt executate în astfel de condiții, aceasta
variabilă permite codului perl să determine dacă acțiunile au sens numai în timpul normal
alergarea sunt garantate. Vezi perlvar.

Nou variabil $^V conține Perl versiune as a şir
$^V conține numărul versiunii Perl ca șir compus din caractere ale căror ordinale
potrivesc numerele versiunii, adică v5.6.0. Aceasta poate fi folosită în comparații de șiruri.

Consultați „Suport pentru șiruri reprezentate ca un vector de ordinale” pentru un exemplu.

Opțional Y2K avertismente
Dacă Perl este construit cu macro-ul cpp „PERL_Y2KWARN” definit, emite avertismente opționale
la concatenarea numărului 19 cu un alt număr.

Acest comportament trebuie să fie activat în mod specific când rulați Configurare. Vedea INSTALARE și
CITEȘTE-MĂ.Y2K.

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

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

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

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

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

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

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

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

@- și @+ furniza început/terminând compensările of regex subpotriviri
Noile variabile magice @- și @+ oferă offset-urile de început și, respectiv, de sfârșit,
de $&, $1, $2 etc. Consultați perlvar pentru detalii.

Panouri și pragmata


Panouri
atribute
Deși este folosit intern de Perl ca pragma, acest modul oferă și o modalitate de preluare
subrutine si atribute variabile. Vezi atribute.

B Suita Perl Compiler a fost reproiectată pe larg pentru această versiune. Mai mult din
Suita standard de testare Perl trece atunci când este rulată sub compilator, dar există încă un
cale semnificativă de urmat pentru a obține executabile compilate de calitate a producției.

NOTĂ: Suita Compiler rămâne extrem de experimentală. The
codul generat poate să nu fie corect, chiar și atunci când reușește să se execute
fără erori.

Benchmark
În general, rezultatele benchmark-ului prezintă o eroare medie mai mică și o precizie mai bună a sincronizarii.

Acum puteți rula teste pentru n secunde în loc să ghicească numărul potrivit de teste
rulați: de exemplu, timethese(-5, ...) va rula fiecare cod timp de cel puțin 5 secunde CPU. Zero ca
„numărul de repetări” înseamnă „pentru cel puțin 3 secunde CPU”. Formatul de ieșire are
schimbat de asemenea. De exemplu:

utilizați Benchmark;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})

va scoate acum ceva de genul acesta:

Benchmark: rulează a, b, fiecare timp de cel puțin 5 secunde CPU...
a: 5 secunde wallclock (5.77 usr + 0.00 sys = 5.77 CPU) @ 200551.91/s (n=1156516)
b: 4 secunde wallclock (5.00 usr + 0.02 sys = 5.02 CPU) @ 159605.18/s (n=800686)

Caracteristici noi: „fiecare pentru cel puțin N secunde CPU...”, „secunde wallclock” și „@
operațiuni/secunda CPU (n=operații)".

timp acestea() acum returnează o referință la un hash de obiecte Benchmark care conține testul
rezultate, tastate pe numele testelor.

timethis() acum returnează câmpul de iterații în obiectul rezultat Benchmark în loc de
0.

timp acestea(), timethis(), și noul cmmpthese() (vezi mai jos) poate avea și un format
specificatorul „niciun” pentru a suprima ieșirea.

O noua functie countit() este la fel ca timeit() cu excepția faptului că este nevoie de un TIMP în loc de
un CONT.

O noua functie cmmpthese() tipărește o diagramă care compară rezultatele fiecărui test returnat
de la un timp acestea() apel. Pentru fiecare pereche posibilă de teste, viteza procentuală
este afișată diferența (iters/sec sau secunde/iter).

Pentru alte detalii, consultați Benchmark.

ByteLoader
ByteLoader este o extensie dedicată pentru a genera și rula bytecode Perl. Vedea
ByteLoader.

constant
Referințele pot fi acum folosite.

Noua versiune permite, de asemenea, un liniu de subliniere principal în nume constante, dar nu permite a
liniuță de subliniere dublă (ca în „__LINE__”). Alte nume sunt interzise sau
a avertizat împotriva, inclusiv BEGIN, END etc. Unele nume care au fost forțate în principal::
folosit pentru a eșua în tăcere în unele cazuri; acum sunt fatale (în afara principalului::) și an
avertisment opțional (în interiorul principal::). Capacitatea de a detecta dacă o constantă a avut
fost setat cu un nume dat a fost adăugat.

Vezi constantă.

denumiri
Această pragma implementează evadarea șirului „\N”. Vezi denumiri.

Date::Dumper
O setare „Maxdepth” poate fi specificată pentru a evita aventurarea prea adâncă în date profunde
structurilor. Vezi Date::Dumper.

Implementarea XSUB a Dump() este acum apelat automat dacă setarea „Useqq”.
nu este utilizat.

Dumpingul obiectelor „qr//” funcționează corect.

DB „DB” este un modul experimental care expune o abstractizare curată la depanarea lui Perl
API-ul.

DB_File
DB_File poate fi acum construit cu Berkeley DB versiunile 1, 2 sau 3. Vezi
„ext/DB_File/Changes”.

Dezvoltare::DProf
Devel::DProf, a fost adăugat un profiler de cod sursă Perl. Vezi Devel::DProf și
dprofpp.

Devel::Peek
Modulul Devel::Peek oferă acces la reprezentarea internă a Perl
variabile și date. Este un instrument de depanare a datelor pentru programatorul XS.

Valoare de dumping
Modulul Dumpvalue oferă imagini de pe ecran ale datelor Perl.

DynaLoader
DynaLoader acceptă acum a dl_unload_file() funcţionează pe platforme care acceptă
descărcarea obiectelor partajate folosind dlclose().

De asemenea, Perl poate aranja opțional să descarce toate obiectele partajate de extensii încărcate de
Perl. Pentru a activa acest lucru, construiți Perl cu opțiunea Configurare
„-Accflags=-DDL_UNLOAD_ALL_AT_EXIT”. (Acest lucru poate fi util dacă utilizați Apache cu
mod_perl.)

Engleză
$PERL_VERSION reprezintă acum $^V (o valoare șir) și nu $] (o valoare numerică
valoare).

Env Env acceptă acum accesarea variabilelor de mediu precum PATH ca variabile matrice.

Fcntl
Mai multe constante Fcntl adăugate: F_SETLK64, F_SETLKW64, O_LARGEFILE pentru fișiere mari (mai multe
mai mult de 4 GB) acces (NOTĂ: O_LARGEFILE este adăugat automat la sysopen() steaguri dacă
a fost configurat suport pentru fișiere mari, așa cum este implicit), blocare Free/Net/OpenBSD
indicatori de comportament F_FLOCK, F_POSIX, Linux F_SHLCK și O_ACCMODE: masca combinată a
O_RDONLY, O_WRONLY și O_RDWR. The căuta()/sysseek() constante SEEK_SET, SEEK_CUR,
și SEEK_END sunt disponibile prin eticheta „:seek”. The chmod()/stat () S_IF* constante
și funcțiile S_IS* sunt disponibile prin intermediul etichetei „:mode”.

File::Compare
A compară_text() a fost adăugată funcția, care permite funcții de comparare personalizate.
Vezi File::Compare.

File::Find
File::Find funcționează acum corect atunci când dorit() funcția este fie încărcată automat, fie este a
referință simbolică.

O eroare care a făcut ca File::Find să piardă evidența directorului de lucru la tăierea top-
directoarele de nivel a fost remediată.

File::Find acceptă acum și câteva alte opțiuni pentru a-și controla comportamentul. Poate
urmați legăturile simbolice dacă este specificată opțiunea „urmare”. Activarea „no_chdir”
opțiunea va face File::Find să sari peste schimbarea directorului curent când mergeți
directoare. Indicatorul „untaint” poate fi util atunci când rulați cu verificarea de contaminare activată.

Vezi File::Find.

Fișier::Glob
Această extensie implementează globalizarea fișierelor în stil BSD. În mod implicit, va fi folosit și
pentru implementarea internă a glob() operator. Vezi File::Glob.

Fișier::Spec
Au fost adăugate metode noi la modulul File::Spec: devull() returnează numele lui
dispozitivul nul (/dev/null pe Unix) și tmpdir() numele directorului temporar
(în mod normal / tmp pe Unix). Există acum și metode de conversie între absolut și
nume de fișiere relative: abs2rel() și rel2abs(). Pentru compatibilitate cu sistemele de operare
care specifică nume de volum în căile fișierelor, the splitpath(), splitdir() și catdir()
s-au adăugat metode.

Fișier::Spec::Funcții
Noile module File::Spec::Functions furnizează o interfață funcțională pentru File::Spec
modul. Permite stenografia

$nume complet = catfile($dir1, $dir2, $fisier);

în loc de

$nume complet = File::Spec->catfile($dir1, $dir2, $fișier);

Getopt::Lung
Getopt::Licența lungă s-a schimbat pentru a permite Licența artistică Perl, precum și
GPL. Pe vremuri era doar GPL, ceea ce ieșea în calea aplicațiilor non-GPL care doreau
pentru a utiliza Geopt::Long.

Getopt::Long încurajează utilizarea Pod::Usage pentru a produce mesaje de ajutor. De exemplu:

utilizați Geopt::Long;
utilizare Pod::Utilizare;
my $man = 0;
my $help = 0;
GetOptions('help|?' => \$help, man => \$man) sau pod2usage(2);
pod2usage(1) dacă $help;
pod2usage(-exitstatus => 0, -verbose => 2) dacă $man;

__SFÂRȘIT__

=head1 NUME

eșantion - Folosind Getopt::Long și Pod::Utilizare

=head1 SINOPSIS

eșantion [opțiuni] [fișier ...]

Opțiuni:
-help scurt mesaj de ajutor
-man documentatie completa

=head1 OPȚIUNI

= peste 8

=item B<-ajutor>

Imprimați un scurt mesaj de ajutor și ieșiți.

=item B<-man>

Imprimă pagina de manual și iese.

=spate

=head1 DESCRIERE

B va citi fișierele de intrare date și va face ceva
util cu conținutul acestuia.

=tăiat

Consultați Pod::Utilizare pentru detalii.

O eroare care a împiedicat să fie specificată prima opțiune call-back <> fără opțiune
argumentul a fost rezolvat.

Pentru a specifica caracterele < și > ca opțiuni de pornire, utilizați ><. Rețineți, totuși, că
schimbarea starterelor de opțiuni este puternic depreciată.

IO scrie() și syswrite() va accepta acum o formă cu un singur argument a apelului, pentru
consecvență cu Perl syswrite().

Acum puteți crea un IO::Socket::INET bazat pe TCP fără a forța o încercare de conectare.
Acest lucru vă permite să configurați opțiunile sale (cum ar fi să nu-l blocați) și apoi să apelați
conectați () manual.

Un bug care a împiedicat IO::Socket::protocol() accesor de la returnarea vreodată
valoarea corectă a fost corectată.

IO::Socket::connect folosește acum IO non-blocante în loc de alarma() a face conectarea
timeout-uri.

IO::Socket::accept acum utilizări Selectați() în loc de alarma() pentru a face timeout-uri.

IO::Socket::INET->new acum setează $! corect la eșec. $@ este încă setat pentru înapoi
compatibilitate.

JPL Java Perl Lingo este acum distribuit cu Perl. Consultați jpl/README pentru mai multe informații.

lib „utilizați lib” acum elimină toate intrările duplicate. „no lib” elimină toate numele
intrări.

Matematică::BigInt
Operațiile pe biți „<<”, „>>”, „&”, „|”, și „~” sunt acum acceptate pe bigints.

Matematică::Complex
Metodele accesorii Re, Im, arg, abs, rho și theta pot acționa acum și ca mutatori
(accesor $z->Re(), mutator $z->Re(3)).

Metoda clasei „display_format” și metoda obiectului corespunzătoare
„display_format”, pe lângă faptul că acceptă un singur argument, acum poate accepta și a
parametrul hash. Cheile recunoscute ale unui parametru hash sunt „stil”, care corespunde
cazul unui parametru vechi și doi parametri noi: „format”, care este a
printf()-stil format șir (implicit de obicei la „%.15g”, puteți reveni la
implicit prin setarea șirului de format la „undef”) folosit pentru ambele părți ale unui complex
număr și „polar_pretty_print” (implicit la true), care controlează dacă o încercare
este făcută pentru a încerca să recunoască multipli mici și raționale ale lui pi (2pi, pi/2) la
argument (unghi) al unui număr complex polar.

Schimbarea potențial perturbatoare este că, în contextul listei, ambele metode sunt acum reveni il
parametru hașiș, în loc de doar valoarea parametrului „stil”.

Matematică::Trig
Un pic de trigonometrie radială (cilindric și sferic), coordonate radiale
conversii și s-au adăugat distanța cercului mare.

Pod::Parser, Pod::InputObjects
Pod::Parser este o clasă de bază pentru analizarea și selectarea secțiunilor din documentația podului
dintr-un flux de intrare. Acest modul se ocupă de identificarea paragrafelor pod și
comenzile în intrare și predau paragrafele analizate și comenzile la definite de utilizator
metode care sunt libere să le interpreteze sau să le traducă după cum consideră de cuviință.

Pod::InputObjects definește unele obiecte de intrare necesare pentru Pod::Parser și pentru avansate
utilizatorii Pod::Parser care au nevoie de mai multe despre o comandă în afară de numele și textul acesteia.

Începând cu versiunea 5.6.0 a Perl, Pod::Parser este acum „analizatorul de bază” aprobat oficial
code" recomandat pentru utilizare de către toți traducătorii pod2xxx. Pod::Text (pod2text) și
Pod::Man (pod2man) au fost deja convertiți pentru a utiliza Pod::Parser și eforturi pentru
convert Pod::HTML (pod2html) sunt deja în curs. Pentru orice întrebări sau comentarii
despre analizarea podului și traducerea problemelor și utilităților, vă rugăm să utilizați
[e-mail protejat] lista de discuții.

Pentru informații suplimentare, consultați Pod::Parser și Pod::InputObjects.

Pod::Checker, podchecker
Acest utilitar verifică fișierele pod pentru sintaxa corectă, conform perlpod. Evident
erorile sunt semnalate ca atare, în timp ce avertismentele sunt tipărite pentru erorile care pot fi
tratate cu grație. Lista de verificare nu este încă completă. Vezi Pod::Checker.

Pod::ParseUtils, Pod::Find
Aceste module oferă un set de gadgeturi care sunt utile în principal pentru traducătorii de pod.
Pod::Find traversează structurile de directoare și returnează fișierele pod găsite, împreună cu acestea
nume canonice (cum ar fi „File::Spec::Unix”). Pod::ParseUtils conține Pod::Lista (util
pentru stocarea informațiilor din lista de pod), Pod::Hyperlink (pentru analizarea conținutului „L<>”
secvențe) și Pod::Cache (pentru stocarea în cache a informațiilor despre fișierele pod, de exemplu, noduri de legătură).

Pod::Select, podselect
Pod::Select este o subclasă a Pod::Parser care oferă o funcție numită "podselect()"
pentru a filtra secțiunile specificate de utilizator din documentația brută a podului dintr-un flux de intrare.
podselect este un script care oferă acces la Pod::Select din alte scripturi care urmează să fie
folosit ca filtru. Vedeți Pod::Select.

Pod::Utilizare, pod2usage
Pod::Utilizare oferă funcția "pod2usage()" pentru a imprima mesaje de utilizare pentru un Perl
script bazat pe documentația încorporată a podului. The pod2usage() funcția este în general
util pentru toți autorii de scripturi, deoarece le permite să scrie și să mențină o singură sursă
(pod-urile) pentru documentare, eliminând astfel necesitatea creării și menținerii redundante
textul mesajului de utilizare constând din informații deja în poduri.

Există, de asemenea, un script pod2usage care poate fi folosit de la alte tipuri de scripturi
tipăriți mesajele de utilizare din poduri (chiar și pentru scripturi non-Perl cu pod-uri încorporate în
comentarii).

Pentru detalii și exemple, consultați Pod::Utilizare.

Pod::Text și Pod::Man
Pod::Textul a fost rescris pentru a utiliza Pod::Parser. In timp ce pod2text() este încă disponibil
pentru compatibilitate inversă, modulul are acum o nouă interfață preferată. Vedea
Pod::Text pentru detalii. Noul modul Pod::Text este ușor de subclasat pentru modificări
la ieșire și două astfel de subclase (Pod::Text::Termcap pentru bold și în stilul paginii de manual
sublinierea folosind informații de termen și Pod::Text::Color pentru marcaj cu culoare ANSI
secvențe) sunt acum standard.

pod2man a fost transformat într-un modul, Pod::Man, care folosește și Pod::Parser. În
proces, câteva erori restante legate de citatele din anteturile de secțiuni, citarea de
codul scapă, iar listele imbricate au fost remediate. pod2man este acum un script wrapper
în jurul acestui modul.

SDBM_File
La acest modul a fost adăugată o metodă EXISTS (și sdbm_exists() a fost adăugat la
biblioteca sdbm de bază), astfel încât acum se poate apela exists pe un hash legat SDBM_File și
obțineți rezultatul corect, mai degrabă decât o eroare de rulare.

O eroare care poate să fi cauzat pierderea datelor atunci când se întâmplă să fie citite mai multe blocuri de disc
din baza de date într-un singur FETCH() a fost fixat.

Sys::Syslog
Sys::Syslog folosește acum XSUB-uri pentru a accesa facilitățile din syslog.h, așa că nu mai necesită
syslog.ph să existe.

Sys::Nume gazdă
Sys::Hostname folosește acum XSUB-uri pentru a apela bibliotecile C gethostname() or uname() dacă ei
exista.

Termen::ANSColor
Term::ANSICOlor este un modul foarte simplu pentru a oferi acces ușor și ușor de citit la
Culoare ANSI și secvențe de evadare de evidențiere, acceptate de majoritatea terminalelor ANSI
emulatori. Acum este inclus standard.

Ora::Local
timelocal() și timegm() funcțiile folosite pentru a returna în tăcere rezultate false atunci când
data a intrat în afara intervalului întreg al aparatului. Ei acum în mod constant cârâit() dacă
data se încadrează într-un interval neacceptat.

Win32
Valoarea returnată de eroare în contextul listei a fost modificată pentru toate funcțiile care revin
o listă de valori. Anterior, aceste funcții returnau o listă cu un singur element
„undef” dacă a apărut o eroare. Acum aceste funcții returnează lista goală din acestea
situatii. Acest lucru se aplică următoarelor funcții:

Win32::FsType
Win32::GetOSVersion

Funcțiile rămase sunt neschimbate și continuă să returneze „undef” în caz de eroare chiar și în
contextul listei.

Funcția Win32::SetLastError(ERROR) a fost adăugată ca o completare la
Win32::GetLastError() Funcția.

Noul Win32::GetFullPathName(FILENAME) returnează calea absolută completă pentru
FILENAME în context scalar. În contextul listei, returnează o listă cu două elemente care conține
numele complet calificat al directorului și numele fișierului. Vezi Win32.

XSLoader
Extensia XSLoader este o alternativă mai simplă la DynaLoader. Vezi XSLoader.

Filtre DBM
O nouă funcție numită „Filtre DBM” a fost adăugată la toate modulele DBM --DB_File,
GDBM_File, NDBM_File, ODBM_File și SDBM_File. Filtrele DBM adaugă patru metode noi la
fiecare modul DBM:

cheie_filtru_magazin
filter_store_value
filter_fetch_key
filter_fetch_value

Acestea pot fi folosite pentru a filtra perechile cheie-valoare înainte ca perechile să fie scrise în
baza de date sau imediat după ce sunt citite din baza de date. Consultați perldbmfilter pentru mai multe
informaţii.

pragmata
„Utilizați attrs” este acum învechit și este furnizat doar pentru compatibilitate inversă. A fost
înlocuit cu sintaxa „sub : atribute”. Vezi „Atribute subrutinei” în perlsub și
atribute.

Pragma de avertismente lexicale, „utilizați avertismente;”, pentru a controla avertismentele opționale. Vezi perllexwarn.

„utilizați testul de fișiere” pentru a controla comportamentul testelor de fișiere („-r” „-w” ...). Momentan doar unul
subpragma implementat, „utilizați filetest „acces”;”, care folosește acces(2) sau echivalent cu
verifica permisiunile in loc sa folosesti Stat(2) ca de obicei. Acest lucru contează în sistemele de fișiere unde
există ACL-uri (liste de control al accesului): the Stat(2) s-ar putea să mintă, dar acces(2) știe mai bine.

Pragma „deschisă” poate fi utilizată pentru a specifica disciplinele implicite pentru constructorii de mâner (de ex
deschis()) și pentru qx//. Cele două pseudodiscipline „:raw” și „:crlf” sunt în prezent
acceptat pe platformele derivate din DOS (adică unde binmode nu este un no-op). Vezi si
"binmode() poate fi folosit pentru a seta modurile :crlf și :raw".

Utilitate Modificări


dprofpp
„dprofpp” este folosit pentru a afișa datele de profil generate folosind „Devel::DProf”. Vezi dprofpp.

find2perl
Utilitarul „find2perl” folosește acum caracteristicile îmbunătățite ale modulului File::Find. The
Opțiunile -depth și -follow sunt acceptate. Documentația podului este, de asemenea, inclusă în
script-ul.

h2xs
Instrumentul „h2xs” poate funcționa acum împreună cu „C::Scan” (disponibil de la CPAN) pentru
analizează automat fișierele antet din viața reală. Opțiunile „-M”, „-a”, „-k” și „-o” sunt
nou.

perlcc
„perlcc” acceptă acum backend-urile C și Bytecode. În mod implicit, generează rezultate de la
backend-ul C simplu, mai degrabă decât backend-ul C optimizat.

Suportul pentru platformele non-Unix a fost îmbunătățit.

perldoc
„perldoc” a fost reproiectat pentru a evita posibile găuri de securitate. În mod implicit, nu va lăsa
în sine să fie rulat ca superutilizator, dar puteți utiliza în continuare -U comutați pentru a încerca să scadă
privilegii mai întâi.

Perl Debugger
Au fost adăugate multe remedieri de erori și îmbunătățiri perl5db.pl, depanatorul Perl. Ajutorul
documentația a fost rearanjată. Noile comenzi includ „< ?”, „> ?” și „{ ?” a enumera
acțiuni curente, „omule docpage" pentru a rula vizualizatorul de documente pe un set de documente Perl și suport pentru
opțiunile citate. Informațiile de ajutor au fost rearanjate și ar trebui să fie vizibile din nou dacă
tu folosești mai puțin ca paginator. O gaură serioasă de securitate a fost astupată - ar trebui
eliminați imediat toate versiunile mai vechi ale depanatorului Perl așa cum a fost instalat anterior
lansări, până la perl3, din sistemul dumneavoastră pentru a evita să fiți mușcat de asta.

Îmbunătățit Documentație


Multe dintre fișierele README specifice platformei fac acum parte din instalarea perl. Vedea
perl pentru lista completă.

perlapi.pod
Lista oficială a funcțiilor publice Perl API.

perlboot.pod
Un tutorial pentru începători pe Perl orientat pe obiecte.

perlcompile.pod
O introducere în utilizarea suitei Perl Compiler.

perldbmfilter.pod
Un document despre utilizarea facilitatii de filtrare DBM.

perldebug.pod
Toate materialele care nu au legătură cu rularea depanatorului Perl, plus toate cele de nivel scăzut
detalii care riscau să zdrobească utilizatorul ocazional al depanatorului, au fost mutate din
pagina de manual veche la următoarea intrare de mai jos.

perldebguts.pod
Această nouă pagină de manual conține materiale de nivel excesiv de scăzut care nu au legătură cu Perl
depanator, dar ușor legat de depanarea Perl în sine. Conține și niște arcane
detalii interne despre modul în care funcționează procesul de depanare care pot fi de interes numai pentru
dezvoltatorii de depanare Perl.

perlfork.pod
Note privind furculiţă() emulare disponibilă în prezent pentru platforma Windows.

perlfilter.pod
O introducere în scrierea filtrelor sursă Perl.

perlhack.pod
Câteva linii directoare pentru piratarea codului sursă Perl.

perlintern.pod
O listă de funcții interne din codul sursă Perl. (Lista este în prezent goală.)

perllexwarn.pod
Informații introductive și de referință despre categoriile de avertismente cu scop lexical.

perlnumber.pod
Informații detaliate despre numere așa cum sunt reprezentate în Perl.

perlopentut.pod
Un tutorial despre utilizare deschis() în mod eficient.

perlreftut.pod
Un tutorial care introduce elementele esențiale ale referințelor.

perltootc.pod
Un tutorial despre gestionarea datelor de clasă pentru modulele obiect.

perltodo.pod
Discuție despre caracteristicile cel mai des dorite care ar putea fi suportate într-o zi în Perl.

perlunicode.pod
O introducere în caracteristicile de suport Unicode în Perl.

Performanţă îmbunătățiri


simplu fel() folosind { $a <=> $b } și il ca sunt optimizate
Multe comune fel() operațiunile care utilizează un bloc simplu înliniat sunt acum optimizate pentru mai rapid
performanță.

Optimizat misiuni la lexical variabile
Anumite operațiuni din RHS ale declarațiilor de atribuire au fost optimizate pentru a fi setate direct
variabila lexicală pe LHS, eliminând costurile de copiere redundante.

Mai rapid subrutină Apeluri
Modificările minore în modul în care apelurile subrutine sunt gestionate intern oferă îmbunătățiri marginale
în performanță.

șterge(), fiecare(), valori () și hașiș repetare sunt mai repede
Valorile hash returnate de șterge(), fiecare(), valori () iar hashurile într-un context de listă sunt
valorile reale din hash, în loc de copii. Acest lucru are ca rezultat semnificativ mai bine
performanță, deoarece elimină copierea inutile în majoritatea situațiilor.

Instalare și Configuraţie Îmbunătățiri


-Dusethreads mijloace ceva diferit
Indicatorul -Dusethreads permite acum suportul pentru firul de discuri bazat pe interpret experimental de către
Mod implicit. Pentru a obține aroma firelor experimentale care a fost în 5.005, trebuie să o faceți
rulați Configurare cu „-Dusethreads -Duse5005threads”.

Începând cu v5.6.0, suportul pentru firele de execuție interpretează încă lipsește o modalitate de a crea fire noi
din Perl (adică, „utilizați Thread;” nu va funcționa cu firele de execuție). "utilizați Thread;"
continuă să fie disponibil când specificați opțiunea -Duse5005threads la Configurare, erori
si tot.

NOTĂ: Suportul pentru fire continuă să fie o caracteristică experimentală.
Interfețele și implementarea sunt supuse unor schimbări bruște și drastice.

Nou Configurați steaguri
Următoarele semne noi pot fi activate pe linia de comandă Configurare prin rularea Configurare
cu „-Dflag”.

foloseste multiplicitatea
usethreads useithreads (fire de discuție noi de interpret: încă nu există API Perl)
usethreads use5005threads (firele așa cum erau în 5.005)

use64bitint (egal cu „use64bits”) acum depreciat)
folosește64bitall

uselongdouble
usemorebits
utilizați fișiere mari
folosește șosete (acceptat doar SOCKS v5)

Filetate și 64 de biți acum mai mult îndrăzneț
Opțiunile de configurare care permit utilizarea firelor de execuție și utilizarea pe 64 de biți sunt acum mai multe
îndrăznețe în sensul că nu mai au o listă explicită de sisteme de operare cunoscute
fire/capacități pe 64 de biți. Cu alte cuvinte: dacă sistemul dumneavoastră de operare are necesarul
API-uri și tipuri de date, ar trebui să puteți merge mai departe și să le folosiți, pentru fire de execuție
Configurați -Dusethreads și pentru 64 de biți fie explicit prin Configurare -Duse64bitint sau
implicit dacă sistemul dumneavoastră are tipuri de date de 64 de biți. Vezi și „Suport 64 de biți”.

Lung Dublu
Unele platforme au „duble lungi”, numere în virgulă mobilă cu o gamă chiar mai mare decât
„duble” obișnuite. Pentru a permite utilizarea dublelor lungi pentru scalarii lui Perl, utilizați -Duselongdouble.

-Dusemorebits
Puteți activa atât -Duse64bitint, cât și -Duselongdouble cu -Dusemorebits. Vezi si
„Suport pe 64 de biți”.

-Duselargefiles
Unele platforme acceptă API-uri de sistem care sunt capabile să gestioneze fișiere mari (de obicei,
fișiere mai mari de doi gigaocteți). Perl va încerca să folosească aceste API-uri dacă o cereți
-Duselargefiles.

Consultați „Suport pentru fișiere mari” pentru mai multe informații.

installusrbinperl
Puteți utiliza „Configurare -Uinstallusrbinperl”, ceea ce face ca installperl să omite instalarea
perl, de asemenea, ca /usr/bin/perl. Acest lucru este util dacă preferați să nu modificați / usr / bin pentru unii
motiv sau altul, dar dăunător pentru că multe scripturi presupun că găsesc Perl în /usr/bin/perl.

SOCKS a sustine
Puteți folosi „Configurare -Dusesocks”, care determină Perl să verifice protocolul proxy SOCKS
bibliotecă (v5, nu v4). Pentru mai multe informații despre SOCKS, consultați:

http://www.socks.nec.com/

"-A" pavilion
Puteți „post-editați” variabilele Configurare folosind comutatorul Configurare „-A”. Editarea
se întâmplă imediat după ce fișierele de indicii specifice platformei au fost procesate, dar înainte
începe procesul de configurare propriu-zis. Rulați „Configurare -h” pentru a afla „-A” complet
sintaxă.

pachet plus Instalare Directoare
Structura instalației a fost îmbogățită pentru a îmbunătăți suportul pentru întreținere
versiuni multiple de perl, pentru a oferi locații pentru module, scripturi și scripturi furnizate de furnizor
pagini de manual și pentru a ușura întreținerea modulelor, scripturilor și paginilor de manual adăugate local. Vedea
secțiunea Directoare de instalare din fișierul INSTALARE pentru detalii complete. Pentru
majoritatea utilizatorilor construiesc și instalează din sursă, valorile implicite ar trebui să fie în regulă.

Dacă ați folosit anterior „Configurare -Dsitelib” sau „-Dsitearch” pentru a seta valori speciale pentru
directoarele bibliotecii, ați putea dori să luați în considerare utilizarea noii setari „-Dsiteprefix”.
in schimb. De asemenea, dacă doriți să reutilizați un fișier config.sh dintr-o versiune anterioară de perl,
ar trebui să vă asigurați că verificați dacă Configure face alegeri sensibile pentru noile directoare.
Consultați INSTALARE pentru detalii complete.

gcc în mod automat încercat if 'cc' face nu părea la be de lucru
În multe platforme, „cc” furnizat de furnizor este prea redus pentru a construi Perl (în principiu,
„cc” nu face ANSI C). Dacă acesta pare să fie cazul și „cc” nu pare
fie compilatorul GNU C „gcc”, se face o încercare automată de a găsi și de a utiliza „gcc”.

Platformă specific schimbari


Suportat platforme
· Mach CThreads (NEXTSTEP, OPENSTEP) sunt acum acceptate de extensia Thread.

· GNU/Hurd este acum acceptat.

· Rhapsody/Darwin este acum acceptat.

· EPOC este acum acceptat (pe Psion 5).

· Portul cygwin (fost cygwin32) a fost mult îmbunătățit.

DOS
· Perl funcționează acum cu djgpp 2.02 (și 2.03 alpha).

· Numele variabilelor de mediu nu mai sunt convertite în majuscule.

· Au fost remediate codurile de ieșire incorecte din backtick-uri.

· Acest port continuă să folosească propriul globbing încorporat (nu File::Glob).

OS390 (OpenEdition MVS)
Suportul pentru această platformă EBCDIC nu a fost reînnoit în această versiune. Sunt
dificultăți în reconcilierea standardizării Perl pe UTF-8 ca reprezentare internă
pentru caracterele cu setul de caractere EBCDIC, deoarece cele două sunt incompatibile.

Nu este clar dacă versiunile viitoare vor reînnoi suportul pentru această platformă, dar
posibilitate există.

extensia VMS
Numeroase revizuiri și extensii la configurare, construire, testare și instalare
proces pentru a se adapta schimbărilor de bază și opțiunilor specifice VMS.

Extindeți codul de gestionare %ENV pentru a permite maparea timpului de execuție la nume logice, simboluri CLI și CRTL
matrice de mediu.

Extinderea codului de invocare a subprocesului pentru a accepta specificațiile fișierelor ca „verbe” de comandă.

Adăugați la linia de comandă Perl procesarea abilitatea de a utiliza tipuri de fișiere implicite și de a recunoaște
„2>&1” în stil Unix.

Extinderea rutinelor File::Spec::VMS și integrarea în ExtUtils::MM_VMS.

Extensie ExtUtils::MM_VMS pentru a gestiona extensiile complexe mai flexibil.

Cuvintele goale la începutul căilor de sintaxă Unix pot fi tratate ca text și nu doar ca logic
nume.

Traducere securizată opțională a mai multor nume logice utilizate intern de Perl.

Diverse remedieri de erori și portarea noului cod de bază în VMS.

Mulțumiri sunt cu plăcere extinse numeroșilor oameni care au contribuit la patch-uri VMS, la testare,
și idei.

Win32
Perl poate emula acum furculiţă() intern, folosind mai mulți interpreți care rulează în diferite
fire concurente. Acest suport trebuie activat în timpul construirii. Vezi perlfork pentru
informatii detaliate.

Când i se oferă o cale care constă numai dintr-un nume de unitate, cum ar fi „A:”, opendir() și
stat () acum utilizați directorul de lucru curent pentru unitate, mai degrabă decât rădăcina unității.

Funcțiile XSUB încorporate în spațiul de nume Win32:: sunt documentate. Vezi Win32.

$^X conține acum numele complet al căii executabilului care rulează.

A Win32::GetLongPathName() funcția este furnizată pentru a completa Win32::GetFullPathName() și
Win32::GetShortPathName(). Vezi Win32.

POSIX::uname() este suportat.

system(1,...) returnează acum ID-urile de proces adevărate, mai degrabă decât identificatoarele de proces. ucide() acceptă
orice ID de proces real, mai degrabă decât să returneze strict valori din sistem (1,...).

Pentru o mai bună compatibilitate cu Unix, „kill(0, $pid)” poate fi acum folosit pentru a testa dacă a
procesul există.

Modulul „Shell” este acceptat.

A fost adăugat un suport mai bun pentru construirea Perl sub command.com în Windows 95.

Scripturile sunt citite implicit în modul binar pentru a permite ByteLoader (și mecanismul de filtrare
în general) să funcţioneze corespunzător. Pentru compatibilitate, manerul fișierului DATE va fi setat la text
modul dacă este detectat un întoarcere de cărucior la sfârșitul liniei care conține __END__ sau
__DATE__ token; dacă nu, manerul fișierului DATE va rămâne deschis în modul binar. Mai devreme
versiunile au deschis întotdeauna manerul fișierului DATE în modul text.

glob() operatorul este implementat prin extensia „File::Glob”, care acceptă glob
sintaxa shell-ului C. Acest lucru crește flexibilitatea glob() operator, dar acolo
pot fi probleme de compatibilitate pentru programele care se bazau pe sintaxa globală mai veche. daca tu
doriți să păstrați compatibilitatea cu sintaxa mai veche, poate doriți să rulați perl cu
„-MFile::DosGlob”. Pentru detalii și informații despre compatibilitate, consultați File::Glob.

Semnificativ bug remedieri


on gol fișiere
Cu $/ setat la „undef”, „slurping” un fișier gol returnează un șir de lungime zero (în schimb
de „undef”, așa cum era înainte) prima dată când HANDLE este citit după ce $/ este setat la „undef”.
Citește mai departe randamentul „undef”.

Aceasta înseamnă că următoarele vor adăuga „foo” la un fișier gol (obișnuia să nu facă nimic):

perl -0777 -pi -e 's/^/foo/' fişier_gol

Comportamentul:

perl -pi -e 's/^/foo/' fişier_gol

este neschimbat (continuă să lase fișierul gol).

„eval '...'" îmbunătățiri
Numerele liniilor (după cum se reflectă de apelant() iar majoritatea diagnosticelor) în cadrul „eval '...'” au fost
adesea incorect acolo unde aici erau implicate documente. Acest lucru a fost corectat.

Căutări lexicale pentru variabilele care apar în „eval '...'” în cadrul funcţiilor care au fost
ei înșiși numiți în cadrul unui „eval '...'” căutau lexicale în locul greșit. The
căutarea lexicală se termină acum corect la limita blocului subrutinei.

Utilizarea „return” în „eval {...}” a făcut ca $@ să nu fie resetat corect atunci când nu
excepție a avut loc în cadrul evalului. Acest lucru a fost rezolvat.

Analizarea documentelor de aici era greșită când apăreau ca înlocuitori
expresie în „eval 's/.../.../e'”. Acest lucru a fost rezolvat.

TOATE compilare Erori sunt adevărat Erori
Unele „erori” întâlnite în timpul compilării au fost generate în mod necesar pe măsură ce au urmat avertismente
prin eventuala încetare a programului. Acest lucru a permis raportarea mai multor astfel de erori într-un
o singură rulare, mai degrabă decât să provoace o oprire grea la prima eroare care a fost întâlnită.

Mecanismul de raportare a unor astfel de erori a fost reimplementat pentru a pune în coadă timpul de compilare
erori și raportați-le la sfârșitul compilației ca erori adevărate și nu ca
Avertizări. Acest lucru remediază cazurile în care mesajele de eroare s-au scurs sub formă de avertismente
când codul a fost compilat în timpul execuției folosind „eval STRING”, și permite, de asemenea, să fie astfel de erori
prins în mod fiabil folosind „eval”...””.

Implicit închis manere de fișiere sunt mai sigur
Uneori, filehandle de fișiere închise implicit (ca atunci când sunt localizate și Perl
le închide automat la ieșirea din domeniu) ar putea seta din neatenție $? sau $!. Acest
a fost corectat.

Comportament of listă felii is mai mult consistent
Când luați o porțiune dintr-o listă literală (spre deosebire de o porțiune dintr-o matrice sau hash), Perl
folosit pentru a returna o listă goală dacă rezultatul s-a întâmplat să fie compus din toate valorile undef.

Noul comportament este de a produce o listă goală dacă (și numai dacă) lista originală era goală.
Luați în considerare următorul exemplu:

@a = (1,undef,undef,2)[2,1,2];

Vechiul comportament ar fi avut ca rezultat ca @a să nu aibă elemente. Noul comportament asigură
are trei elemente nedefinite.

Rețineți în special că comportamentul feliilor din următoarele cazuri rămâne neschimbat:

@a = ()[1,2];
@a = (getpwent)[7,0];
@a = (orice_returnează_listă_vide())[2,1,2];
@a = @b[2,1,2];
@a = @c{'a','b','c'};

Vezi perldata.

„(\$)” prototip și $foo{a}
Un prototip de referință scalar permite acum corect un element hash sau matrice în acel slot.

"mergi la &sub" și ÎNCĂRCARE AUTOMATĂ
Construcția „goto &sub” funcționează corect atunci când &sub se încarcă automat.

"-cuvânt gol" permis în "utilizare întreg"
Autocitarea cuvintelor goale precedate de „-” nu a funcționat în versiunile anterioare când
pragma „întreg” a fost activată. Acest lucru a fost reparat.

eşecurile in DISTRUGE()
Când codul dintr-un destructor a aruncat o excepție, aceasta a trecut neobservat în versiunile anterioare ale
Perl, cu excepția cazului în care cineva s-a întâmplat să caute în $@ imediat după punctul destructor
s-a întâmplat să fugă. Astfel de erori sunt acum vizibile ca avertismente atunci când avertismentele sunt activate.

Local gandaci fixată
printf() și sprintf() anterior resetați localitatea numerică la localul implicit „C”.
Acest lucru a fost rezolvat.

Numerele formatate în funcție de localitatea numerică locală (cum ar fi utilizarea unei virgule zecimale
în loc de un punct zecimal) a provocat avertismente „nu este numeric”, chiar și în timpul operațiunilor
accesarea acestor numere a produs rezultate corecte. Aceste avertismente au fost întrerupte.

Memorie scurgeri
Construcția „eval „return sub {...}”” poate pierde uneori memorie. Acest lucru a fost rezolvat.

Operațiunile care nu sunt constructori de gestionare a fișierelor, folosite pentru a pierde memorie atunci când sunt utilizate pe invalid
manere de fișiere. Acest lucru a fost rezolvat.

Construcțiile care au modificat @_ ar putea să nu reușească să dealocați valori în @_ și, astfel, să scurgă memorie.
Acest lucru a fost corectat.

Fals subrutină cioturi după a eșuat subrutină Apeluri
Perl putea crea uneori stub-uri de subrutine goale atunci când o subrutină nu a fost găsită în
pachet. Astfel de cazuri au împiedicat căutările ulterioare ale metodelor să progreseze în pachetele de bază.
Acest lucru a fost corectat.

Altera eşecuri în "-U"
Când rulați în modul nesigur, încălcările de contaminare pot provoca uneori defecțiuni silențioase. Acest
a fost fixat.

Sfârşit blocuri și il "-c" comuta
Versiunile anterioare erau folosite pentru a rula BEGIN și END blochează când Perl a fost rulat în modul doar compilare.
Deoarece acesta nu este de obicei comportamentul așteptat, blocurile END nu mai sunt executate
când se folosește comutatorul „-c” sau dacă compilarea eșuează.

Consultați „Suport pentru blocurile CHECK” pentru cum să rulați lucrurile când se termină faza de compilare.

Potențial la scăpa DATE manere de fișiere
Utilizarea simbolului „__DATA__” creează un handle de fișier implicit pentru fișierul care conține fișierul
jeton. Este responsabilitatea programului să-l închidă când a terminat de citit din el.

Această avertizare este acum mai bine explicată în documentație. Vezi perldata.

Nou or schimbată Diagnostics


Variabila „%s” %s maschează declarația anterioară în același %s
(W misc) O variabilă „meu” sau „noastru” a fost redeclarată în domeniul curent sau
declarație, eliminând efectiv orice acces la instanța anterioară. Aceasta este
aproape întotdeauna o eroare de tipar. Rețineți că variabila anterioară va exista în continuare
până la sfârșitul domeniului de aplicare sau până când toate referenții de închidere ale acestuia sunt distruși.

„sub-ul meu” nu a fost încă implementat
(F) Subrutinele cu scop lexical nu sunt încă implementate. Nu încerca asta încă.

Variabila „noastre” %s a fost redeclarată
(W misc) Se pare că ați declarat deja același global o dată înainte în curent
domeniul de aplicare lexical.

'!' permis numai după tipurile %s
(F) „!” este permisă intrarea ambalaj() și despacheta() numai după anumite tipuri. Vezi „pachet” în
perlfunc.

/ nu pot lua o numărătoare
(F) Aveai un șablon de despachetat care indică un șir de lungime numărată, dar ai și
a specificat o dimensiune explicită pentru șir. Vezi „pachet” în perlfunc.

/ trebuie urmat de a, A sau Z
(F) Aveți un șablon de despachetat care indică un șir de lungime numărată, care trebuie să fie
urmat de una dintre literele a, A sau Z pentru a indica ce fel de șir urmează să fie
despachetat. Vezi „pachet” în perlfunc.

/ trebuie urmat de a*, A* sau Z*
(F) Aveți un șablon de pachet care indică un șir de lungime numărată, momentan singurul
lucrurile care pot avea lungimea numărată sunt a*, A* sau Z*. Vezi „pachet” în perlfunc.

/ trebuie să urmeze un tip numeric
(F) Aveți un șablon de despachetare care conținea „#”, dar acesta nu a urmat unele
specificația de despachetare numerică. Vezi „pachet” în perlfunc.

/%s/: Escape nerecunoscută \\%c a trecut prin
(W regexp) Ați folosit o combinație backslash-caracter care nu este recunoscută de Perl.
Această combinație apare într-o variabilă interpolată sau într-o obișnuită delimitată cu „'”.
expresie. Personajul a fost înțeles la propriu.

/%s/: Escape nerecunoscută \\%c în clasa de caractere trecută
(W regexp) Ați folosit o combinație backslash-caracter care nu este recunoscută de Perl
în interiorul claselor de caractere. Personajul a fost înțeles la propriu.

/%s/ ar trebui probabil scris ca „%s”
(Sintaxa W) Ați folosit un model în care Perl se aștepta să găsească un șir, ca în
primul argument pentru a „adera”. Perl va trata rezultatul adevărat sau fals al potrivirii
model împotriva $_ ca șir, care probabil nu este ceea ce ați avut în minte.

%s() a apelat prea devreme pentru a verifica prototipul
(Prototip W) Ați apelat o funcție care are un prototip înainte ca analizatorul să vadă a
definiție sau declarație pentru acesta și Perl nu a putut verifica dacă apelul este conform
Prototipul. Trebuie fie să adăugați o declarație de prototip timpurie pentru
subprogram în cauză sau mutați definiția subrutinei înaintea apelului pentru a obține
verificarea corectă a prototipului. Alternativ, dacă sunteți sigur că sunați la
funcţionează corect, puteţi pune un ampersand înaintea numelui pentru a evita avertismentul.
Vezi perlsub.

Argumentul %s nu este un element HASH sau ARRAY
(F) Argumentul pentru exista() trebuie să fie un element hash sau matrice, cum ar fi:

$foo{$bar}
$ref->{"susie"}[12]

Argumentul %s nu este un element sau o felie HASH sau ARRAY
(F) Argumentul pentru șterge() trebuie să fie fie un element hash, fie un element de matrice, cum ar fi:

$foo{$bar}
$ref->{"susie"}[12]

sau un hash sau o porție de matrice, cum ar fi:

@foo[$bar, $baz, $xyzzy]
@{$ref->[12]}{"susie", "queue"}

Argumentul %s nu este un nume de subrutină
(F) Argumentul pentru exista() pentru „există &sub” trebuie să fie un nume de subrutină și nu un
apel de subrutină. „exists &sub()” va genera această eroare.

Atributul pachetului %s poate intra în conflict cu cuvântul rezervat viitor: %s
(W rezervat) A fost folosit un nume de atribut cu minuscule care avea un handler specific pachetului.
Acest nume ar putea avea o semnificație pentru Perl însuși într-o zi, chiar dacă nu are încă.
Poate că ar trebui să utilizați în schimb un nume de atribut cu majuscule și litere mixte. Vezi atribute.

(în curățare) %s
(W misc) Acest prefix indică de obicei că a DISTRUGE() metoda a ridicat indicat
excepție. Deoarece destructorii sunt de obicei apelați de către sistem în puncte arbitrare
în timpul execuției, și adesea de un număr mare de ori, avertismentul este emis o singură dată
pentru orice număr de eșecuri care altfel ar avea ca rezultat același mesaj
repetat.

Eșecul apelurilor inverse trimise de utilizatori folosind indicatorul „G_KEEPERR” ar putea duce, de asemenea, la
acest avertisment. Vedeți „G_KEEPERR” în perlcall.

<> ar trebui să fie ghilimele
(F) Ai scris „cere " când ar fi trebuit să scrii "require 'file'".

Încercați să vă alăturați sinelui
(F) Ați încercat să vă alăturați unui fir din interiorul său, ceea ce este o sarcină imposibilă. Tu
este posibil să vă alăturați firului greșit sau poate fi necesar să mutați a te alatura() altora
fir.

Model de substituție evalat rău
(F) Ați folosit comutatorul /e pentru a evalua înlocuirea unei înlocuiri, dar perl
a găsit o eroare de sintaxă în cod de evaluat, cel mai probabil o acoladă dreaptă neașteptată
„}”.

Rău realloc() nesocotit
(S) O rutină internă numită realloc() pe ceva ce nu fusese niciodată malloc ()ed
in primul loc. Obligatoriu, dar poate fi dezactivat prin setarea variabilei de mediu
„PERL_BADFREE” la 1.

Bareword găsit în condițional
(W bareword) Compilatorul a găsit un bareword unde se aștepta la un condițional, care
adesea indică faptul că un || sau && a fost analizat ca parte a ultimului argument al
constructul anterior, de exemplu:

deschis FOO || a muri;

De asemenea, poate indica o constantă scrisă greșit care a fost interpretată ca un cuvânt gol:

utilizați constanta TYPO => 1;
if (TYOP) { print "foo" }

Pragma „strictă” este utilă în evitarea unor astfel de erori.

Număr binar > 0b11111111111111111111111111111111 neportabil
(W portabil) Numărul binar pe care l-ați specificat este mai mare decât 2**32-1 (4294967295) și
prin urmare neportabil între sisteme. Consultați perlport pentru mai multe despre portabilitate
preocupări.

Dimensiunea vectorului de biți > 32 neportabil
(W portabil) Utilizarea dimensiunilor vectorului de biți mai mari de 32 este neportabilă.

Buffer overflow în prime_env_iter: %s
(W intern) Un avertisment specific VMS. În timp ce Perl se pregătea să repete
%ENV, a întâlnit un nume logic sau o definiție de simbol care era prea lungă, așa că a fost
trunchiat la șirul afișat.

Nu se poate verifica sistemul de fișiere al scriptului „%s”
(P) Din anumite motive, nu puteți verifica sistemul de fișiere al scriptului pentru nosuid.

Nu se poate declara clasa pentru %s non-scalar în „%s”
(S) În prezent, numai variabilele scalare pot fi declarate cu un anumit calificator de clasă în a
declarația „mea” sau „noastre”. Semantica poate fi extinsă pentru alte tipuri de variabile
in viitor.

Nu se poate declara %s în „%s”
(F) Numai variabilele scalare, matrice și hash pot fi declarate ca variabile „me” sau „noastre”.
Ele trebuie să aibă identificatori obișnuiți ca nume.

Nu se poate ignora semnalul CHLD, forțând la implicit
(semnal W) Perl a detectat că rulează cu semnalul SIGCHLD (uneori
cunoscut ca SIGCLD) dezactivat. Deoarece dezactivarea acestui semnal va interfera cu corect
determinarea stării de ieșire a proceselor copil, Perl a resetat semnalul
valoare implicită. Această situație indică de obicei că programul părinte în cadrul căruia
Perl poate rula (de exemplu, cron) este foarte neglijent.

Nu se poate modifica apelul subrutinei non-lvalue
(F) Subrutinele menite a fi utilizate în context lvalue ar trebui declarate ca atare, vezi
„Subrutine Lvalue” în perlsub.

Nu pot citi mediul CRTL
(S) Un avertisment specific VMS. Perl a încercat să citească un element din %ENV din CRTL-uri
matrice de mediu intern și a descoperit că matricea lipsește. Trebuie să-ți dai seama
a afla unde CRTL-ul dvs. a greșit mediul sau definit PERL_ENV_TABLES (vezi perlvms) deci
acel mediu nu este căutat.

Nu se poate elimina %s: %s, săriți fișierul
(S) Ați solicitat o editare inlocuită fără a crea un fișier de rezervă. Perl nu a putut
eliminați fișierul original pentru a-l înlocui cu fișierul modificat. Dosarul a fost lăsat
nemodificat.

Nu se poate returna %s din subrutina lvalue
(F) Perl a detectat o încercare de a returna valori l ilegale (cum ar fi temporare sau numai în citire
valori) dintr-o subrutină folosită ca valoare l. Acest lucru nu este permis.

Nu se poate slăbi o nonreferință
(F) Ați încercat să slăbiți ceva care nu era o referință. Numai referințele pot
fi slăbit.

Clasa de caractere [:%s:] necunoscută
(F) Clasa din clasa de caractere [: :] sintaxa este necunoscută. Vezi perlre.

Sintaxa clasei de caractere [%s] aparține claselor de caractere
(W nesigur) Clasa de caractere construiește [: :], [= =] și [. .] du-te în interiorul caracter
clase, [] fac parte din construct, de exemplu: /[012[:alpha:]345]/. notițe
că [= =] și [. .] nu sunt implementate în prezent; sunt pur și simplu substituenți pentru
extinderi viitoare.

Constanta nu este referință %s
(F) O valoare constantă (declarată probabil folosind pragma „utilizare constantă”) este în curs de a fi
dereferențiat, dar înseamnă un tip greșit de referință. Mesajul indică
tipul de referință care era așteptat. Acest lucru indică de obicei o eroare de sintaxă în
dereferențiarea valorii constante. Vezi „Funcții constante” în perlsub și constantă.

constantă(%s): %s
(F) Analizorul a găsit inconsecvențe fie în timp ce încerca să definească o supraîncărcare
constantă sau când încercați să găsiți numele caracterului specificat în evadarea „\N{...}”.
Poate ați uitat să încărcați pragma corespunzătoare „supraîncărcare” sau „nume de caractere”? Vedea
nume și supraîncărcare.

CORE::%s nu este un cuvânt cheie
(F) Spațiul de nume CORE:: este rezervat cuvintelor cheie Perl.

defined(@array) este depreciat
(D) definit() nu este de obicei util pe matrice, deoarece verifică dacă există un nedefinit
mărime scalară valoare. Dacă doriți să vedeți dacă matricea este goală, utilizați doar „dacă (@array) { # nu
gol }" de exemplu.

defined(%hash) este depreciat
(D) definit() nu este de obicei util pe hashuri, deoarece verifică dacă există un nedefinit
mărime scalară valoare. Dacă doriți să vedeți dacă hash-ul este gol, utilizați doar „if (%hash) { # not
gol }" de exemplu.

Nu a produs un antet valid
Consultați Eroare server.

(Ați vrut să spuneți „local” în loc de „al nostru”?)
(W misc) Amintiți-vă că „nostru” nu localizează variabila globală declarată. Tu ai
a declarat-o din nou în aceeași sferă lexicală, ceea ce pare de prisos.

Documentul nu conține date
Consultați Eroare server.

introducerea efectivă a %s a eșuat
(F) În timp ce se află sub pragma „utilizați testul fișierului”, comutarea uid-urilor reale și eficiente sau
gids a eșuat.

false [] interval „%s” în expresia regulată
(W regexp) Un interval de clasă de caractere trebuie să înceapă și să se termine la un caracter literal, nu
altă clasă de caractere precum „\d” sau „[:alpha:]”. „-” din intervalul dvs. fals este
interpretat ca un „-”. Luați în considerare citarea „-”, „\-”. Vezi perlre.

Filehandle %s deschis numai pentru ieșire
(W io) Ați încercat să citiți dintr-un handle de fișier deschis doar pentru scriere. Dacă ai intenționat
pentru a fi un handle de fișier de citire/scriere, trebuia să-l deschideți cu „+<” sau „+>” sau „+>>”
în loc de „<” sau nimic. Dacă intenționați să citiți doar din fișier, utilizați „<”.
Vezi „deschide” în perlfunc.

turmă() pe mânerul de fișier închis %s
(W închis) Filehandle-ul pe care încercați să îl faceți turmă() s-a închis ceva timp
pana acum. Verificați-vă fluxul logic. turmă() operează pe filehandle. Tu esti
încercând să sune turmă() pe un mâner cu același nume?

Simbolul global „%s” necesită un nume explicit al pachetului
(F) Ați spus „utilizați vars stricte”, ceea ce indică faptul că toate variabilele trebuie să fie fie
lexical scop (folosind „meu”), declarat în prealabil folosind „al nostru”, sau explicit
calificat să spună în ce pachet se află variabila globală (folosind „::”).

Număr hexazecimal > 0xffffffff neportabil
(W portabil) Numărul hexazecimal pe care l-ați specificat este mai mare de 2**32-1 (4294967295)
și, prin urmare, neportabil între sisteme. Consultați perlport pentru mai multe despre portabilitate
preocupări.

Valoarea mediului CRTL prost format „%s”
(W intern) Un avertisment specific VMS. Perl a încercat să citească conținutul intern al CRTL
matrice environ și am întâlnit un element fără delimitatorul „=" folosit pentru a separa
chei din valori. Elementul este ignorat.

Mesaj prost format în prime_env_iter: |%s|
(W intern) Un avertisment specific VMS. Perl a încercat să citească un nume logic sau CLI
definiția simbolului când se pregătește să itereze peste %ENV și nu a văzut ceea ce era așteptat
delimitator între cheie și valoare, astfel încât linia a fost ignorată.

Cifra binară ilegală %s
(F) Ai folosit o altă cifră decât 0 sau 1 într-un număr binar.

Cifra binară ilegală %s ignorată
(cifră W) Este posibil să fi încercat să utilizați o altă cifră decât 0 sau 1 într-un număr binar.
Interpretarea numărului binar s-a oprit înaintea cifrei ofensatoare.

Număr ilegal de biți în vec
(F) Numărul de biți în vec() (al treilea argument) trebuie să fie o putere a doi de la 1 la
32 (sau 64, dacă platforma dvs. acceptă asta).

Depășirea întregului în număr %s
(W overflow) Numărul hexazecimal, octal sau binar pe care l-ați specificat fie ca a
literal sau ca argument pentru hex() or oct() este prea mare pentru arhitectura ta și are
a fost convertit într-un număr în virgulă mobilă. Pe o arhitectură pe 32 de biți, cea mai mare
numărul hexazecimal, octal sau binar reprezentabil fără depășire este 0xFFFFFFFF,
037777777777 sau, respectiv, 0b11111111111111111111111111111111. Rețineți că Perl
promovează în mod transparent toate numerele într-o reprezentare în virgulă mobilă
intern - supus pierderii erorilor de precizie în operațiunile ulterioare.

Atribut %s nevalid: %s
Atributul indicat pentru o subrutină sau variabilă nu a fost recunoscut de Perl sau de
un handler furnizat de utilizator. Vezi atribute.

Atribute %s nevalide: %s
Atributele indicate pentru o subrutină sau variabilă nu au fost recunoscute de Perl sau
de către un handler furnizat de utilizator. Vezi atribute.

Intervalul [] invalid „%s” în expresia regulată
Intervalul ofensator este acum afișat în mod explicit.

Caracter separator nevalid %s în lista de atribute
(F) S-a văzut altceva decât două puncte sau un spațiu alb între elementele unui
lista de atribute. Dacă atributul anterior avea o listă de parametri între paranteze, poate
lista a fost terminată prea devreme. Vezi atribute.

Caracter separator nevalid %s în lista de atribute de subrutină
(F) S-a văzut altceva decât două puncte sau un spațiu alb între elementele lui a
lista de atribute ale subrutinei. Dacă atributul anterior avea un parametru între paranteze
lista, poate că acea listă a fost terminată prea devreme.

lăsarea efectivă a %s a eșuat
(F) În timp ce se află sub pragma „utilizați testul fișierului”, comutarea uid-urilor reale și eficiente sau
gids a eșuat.

Subs. Lvalue care returnează %s nu au fost încă implementate
(F) Din cauza limitărilor implementării curente, valorile matrice și hash nu pot fi
returnat în subrutinele utilizate în context lvalue. Vezi „subrutine Lvalue” în perlsub.

Metoda %s nu este permisă
Consultați Eroare server.

Lipsește %sbrace%s pe \N{}
(F) Sintaxa greșită a numelui caracterului literal „\N{charname}” în ghilimele duble
context.

Comanda lipsește în conducta deschisă
(W pipe) Ați folosit construcția „open(FH, „| command”)” sau „open(FH, „command |”)”,
dar comanda lipsea sau era goală.

Numele lipsește în „subiul meu”
(F) Sintaxa rezervată pentru subrutinele cu scop lexical necesită ca acestea să aibă a
numele cu care pot fi găsite.

Nu este specificat nici un %s pentru -%c
(F) Comutatorul indicat în linia de comandă are nevoie de un argument obligatoriu, dar tu nu ai făcut-o
unul specificat.

Nu este permis niciun nume de pachet pentru variabila %s în „nostru”
(F) Numele de variabile complet calificate nu sunt permise în declarațiile „noastre”, deoarece asta
nu are prea mult sens în semantica existentă. O astfel de sintaxă este rezervată pentru viitor
extensii.

Nu este permis spațiu după -%c
(F) Argumentul pentru comutatorul de linie de comandă indicat trebuie să urmeze imediat după
comutatorul, fără spații intermediare.

fără informații despre offset UTC; presupunând că ora locală este UTC
(S) Un avertisment specific VMS. Perl nu a reușit să găsească decalajul fusului orar local, așa că
se presupune că ora sistemului local este echivalentă cu UTC. Dacă nu este, definiți
nume logic SYS$TIMEZONE_DIFFERENTIAL pentru a traduce în numărul de secunde care
trebuie adăugat la UTC pentru a obține ora locală.

Număr octal > 037777777777 neportabil
(W portabil) Numărul octal pe care l-ați specificat este mai mare decât 2**32-1 (4294967295) și
prin urmare neportabil între sisteme. Consultați perlport pentru mai multe despre portabilitate
preocupări.

Consultați și perlport pentru scrierea codului portabil.

panica: del_backref
(P) Nu a reușit o verificare internă a coerenței în timp ce încerca să resetați o referință slabă.

panica: kid popen errno read
(F) copil bifurcat a returnat un mesaj de neînțeles despre eroarea sa.

panica: magic_killbackrefs
(P) Nu a reușit o verificare internă a coerenței în timp ce încercam să resetați toate referințele slabe la
un obiect.

Lipsesc paranteze în jurul listei „%s”.
(W paranteză) Ai spus ceva de genul

my $foo, $bar = @_;

când ai vrut să spui

meu ($foo, $bar) = @_;

Amintiți-vă că „al meu”, „al nostru” și „local” se leagă mai strâns decât virgula.

Posibilă interpolare neintenționată a lui %s în șir
(W ambiguu) Cândva, Perl încerca să ghicească dacă doreai o matrice
interpolat sau un @ literal. Nu mai face asta; matricele sunt acum mereu
interpolate în șiruri. Aceasta înseamnă că dacă încercați ceva de genul:

imprimare "[e-mail protejat]";

iar matricea @example nu există, Perl va imprima „fred.com”, care este
probabil că nu este ceea ce ți-ai dorit. Pentru a obține un semn literal „@” într-un șir, puneți o bară oblică inversă
înainte de el, la fel cum ați avea pentru a obține un semn literal „$”.

Posibilă eroare Y2K: %s
(W y2k) Concatenați numărul 19 cu un alt număr, care ar putea fi a
potenţială problemă din anul 2000.

pragma „attrs” este depreciată, utilizați „sub NAME: ATTRS” în schimb
(W depreciat) Ai scris ceva de genul:

sub trebuie
{
utilizați attrs qw(blocat);
}

În schimb, ar trebui să utilizați noua sintaxă a declarației.

sub doit : blocat
{
...

Pragma „use attrs” este acum învechită și este furnizată doar pentru
compatibilitate. Consultați „Atribute subrutinei” în perlsub.

Sfârșitul prematur al antetelor de script
Consultați Eroare server.

Repetați numărarea în pachetele depășite
(F) Nu puteți specifica un număr de repetări atât de mare încât să depășească numerele întregi semnate.
Vezi „pachet” în perlfunc.

Repetați numărarea în depășirile de ambalare
(F) Nu puteți specifica un număr de repetări atât de mare încât să depășească numerele întregi semnate.
Vedeți „despachetați” în perlfunc.

realloc() de memorie eliberată ignorată
(S) O rutină internă numită realloc() pe ceva ce fusese deja eliberat.

Referința este deja slabă
(W misc) Ați încercat să slăbiți o referință care este deja slabă. A face asta are
fara efect.

setpgrp nu poate accepta argumente
(F) Sistemul dvs. are setpgrp() din BSD 4.2, care nu ia argumente, spre deosebire de POSIX
setpgid(), care ia un ID de proces și un ID de grup de proces.

Ciudat *+?{} la expresia de lungime zero
(W regexp) Ați aplicat un cuantificator de expresie regulată într-un loc în care face nu
sens, cum ar fi o afirmație cu lățime zero. Încercați să puneți cuantificatorul în interiorul
afirmație în schimb. De exemplu, modul de potrivire cu „abc” cu condiția să fie urmat
prin trei repetări ale lui „xyz” este „/abc(?=(?:xyz){3})/”, nu „/abc(?=xyz){3}/”.

comutarea efectivă a %s nu este implementată
(F) În timp ce se află în pragma „utilizați testul fișierului”, nu putem comuta între real și eficient
uids sau gids.

Acest Perl nu poate reseta elementele mediului CRTL (%s)
Acest Perl nu poate seta elemente de mediu CRTL (%s=%s)
(W intern) Avertismente specifice VMS. Ați încercat să modificați sau să ștergeți un element din
matricea de mediu intern a CRTL, dar copia dvs. de Perl nu a fost creată cu un CRTL care
conținea setenv() funcţie. Va trebui să reconstruiți Perl cu un CRTL care face,
sau redefiniți PERL_ENV_TABLES (vezi perlvms) astfel încât matricea environ să nu fie țintă
a modificării la %ENV care a produs avertismentul.

Prea târziu pentru a rula blocul %s
(W void) Un bloc CHECK sau INIT este definit în timpul de rulare propriu-zis, când
oportunitatea de a le conduce a trecut deja. Poate încărcați un fișier cu
„cere” sau „face” când ar trebui să utilizați „utilizați” în schimb. Sau poate ar trebui să pui
„require” sau „do” în interiorul unui bloc BEGIN.

Necunoscut deschis() modul „%s”
(F) Al doilea argument din 3-argument deschis() nu se află în lista de moduri valide:
„<”, „>”, „>>”, „+<”, „+>”, „+>>”, „-|”, „|-”.

Procesul necunoscut %x a trimis un mesaj către prime_env_iter: %s
(P) O eroare specifică VMS. Perl citea valori pentru %ENV înainte de a repeta
acesta și altcineva a blocat un mesaj în fluxul de date așteptat de Perl. Al cuiva
foarte confuz, sau poate încercând să subminați populația lui Perl de %ENV pentru nefast
scopuri.

Scăpare nerecunoscută \\%c a trecut prin
(W misc) Ați folosit o combinație backslash-caracter care nu este recunoscută de Perl.
Personajul a fost înțeles la propriu.

Parametru de atribut neterminat în lista de atribute
(F) Lexerul a văzut un caracter de paranteză de deschidere (stânga) în timp ce analiza un atribut
listă, dar caracterul paranteză de închidere (dreapta) care se potrivește nu a fost găsit. Poți
trebuie să adăugați (sau să eliminați) un caracter bară oblică inversă pentru a echilibra parantezele. Vedea
atribute.

Lista de atribute neterminată
(F) Lexerul a găsit altceva decât un simplu identificator la începutul unui
atribut și nu a fost un punct și virgulă sau începutul unui bloc. Poate ai terminat
lista de parametri ai atributului anterior prea devreme. Vezi atribute.

Parametru de atribut neterminat în lista de atribute de subrutină
(F) Lexerul a văzut un caracter de paranteză de deschidere (stânga) în timp ce analiza o subrutină
lista de atribute, dar caracterul parantezei de închidere (dreapta) care se potrivește nu a fost găsit.
Poate fi necesar să adăugați (sau să eliminați) un caracter bară oblică inversă pentru a ajunge la paranteze
echilibru.

Lista de atribute de subrutină neterminată
(F) Lexerul a găsit altceva decât un simplu identificator la începutul lui a
atributul subrutinei și nu a fost un punct și virgulă sau începutul unui bloc. Poate tu
a terminat prea devreme lista de parametri ai atributului anterior.

Valoarea simbolului CLI „%s” este prea lungă
(W misc) Un avertisment specific VMS. Perl a încercat să citească valoarea unui element %ENV
dintr-un tabel de simboluri CLI și a găsit un șir rezultat mai lung de 1024 de caractere.
Valoarea returnată a fost trunchiată la 1024 de caractere.

Numărul versiunii trebuie să fie un număr constant
(P) Încercarea de a traduce o instrucțiune „use Module nn LIST” în echivalentul său
Blocul „BEGIN” a găsit o inconsecvență internă cu numărul versiunii.

Nou teste


lib/attrs
Teste de compatibilitate pentru „sub : attrs” față de „utilizați attrs” mai vechi.

lib/env
Testează capacitatea scalară a noului mediu (de exemplu, „utilizați Env qw($BAR);”).

lib/env-array
Testează capacitatea matricei de mediu nou (de exemplu, „utilizați Env qw(@PATH);”).

lib/io_const
Constante IO (SEEK_*, _IO*).

lib/io_dir
Metode IO legate de director (nou, citire, închidere, derulare înapoi, ștergere legată).

lib/io_multihomed
Prize INET cu gazde multi-homed.

lib/io_poll
IO sondaj().

lib/io_unix
socket-uri UNIX.

op/attrs
Teste de regresie pentru „my ($x,@y,%z) : attrs” și .

op/filetest
Operatori de testare a fișierelor.

op/lex_assign
Verificați operațiunile care accesează obiectele pad (lexicale și temporare).

op/există_sub
Verificați operațiunile „există &sub”.

Incompatibil Modificări


Perl Sursa Incompatibilități
Atenție că toate avertismentele noi care au fost adăugate sau cele vechi care au fost îmbunătățite sunt
nu considerate modificări incompatibile.

Deoarece toate avertismentele noi trebuie să fie solicitate în mod explicit prin comutatorul „-w” sau „avertismente”
pragma, este în cele din urmă responsabilitatea programatorului să se asigure că avertismentele sunt
activat judicios.

VERIFICARE este un cuvânt cheie nou
Toate definițiile subrutinei numite CHECK sunt acum speciale. Consultați „/” Suport pentru CHECK
blocuri"" pentru mai multe informații.

Tratamentul segmentelor de listă de undef sa schimbat
Există o potențială incompatibilitate în comportamentul secțiunilor de listă care sunt cuprinse
în întregime de valori nedefinite. Consultați „Comportamentul secțiunilor de listă este mai consecvent”.

Formatul $English::PERL_VERSION este diferit
Modulul engleză setează acum $PERL_VERSION la $^V (o valoare șir) și nu $] (a
valoare numerica). Aceasta este o potențială incompatibilitate. Trimite-ne un raport prin perlbug dacă
esti afectat de asta.

Consultați „Sistemul de numerotare a versiunilor Perl îmbunătățit” pentru motivele acestei modificări.

Literale de forma 1.2.3 se analizează diferit
Anterior, literalele numerice cu mai mult de un punct erau interpretate ca a
număr în virgulă mobilă concatenat cu unul sau mai multe numere. Astfel de „numere” sunt acum
analizate ca șiruri compuse din ordinale specificate.

De exemplu, „printează 97.98.99” obișnuia să scoată 97.9899 în versiunile anterioare, dar acum
imprimă „abc”.

Consultați „Suport pentru șiruri reprezentate ca un vector de ordinale”.

Posibil modificat generatorul de numere pseudo-aleatoare
Programele Perl care depind de reproducerea unui set specific de numere pseudoaleatoare pot
acum produc rezultate diferite datorită îmbunătățirilor aduse rand() incorporat. Puteți
utilizați „sh Configure -Drandfunc=rand” pentru a obține vechiul comportament.

Vezi „Generator de numere pseudo-aleatorie mai bun”.

Funcția hash pentru cheile hash s-a schimbat
Chiar dacă hashurile Perl nu păstrează ordinea, ordinea aparent aleatorie
întâlnită atunci când se repetă conținutul unui hash este de fapt determinată de
algoritmul de hashing utilizat. Îmbunătățirile în algoritm pot da o ordine aleatorie care
is diferit față de cea a versiunilor anterioare, mai ales când se repetă pe hashuri.

Consultați „Comportament mai bun al hashurilor în cel mai rău caz” pentru informații suplimentare.

„undef” nu reușește la valorile numai pentru citire
Utilizarea operatorului „undef” pe o valoare numai în citire (cum ar fi $1) are același efect ca și
atribuirea „undef” la valoarea readonly--aruncă o excepție.

Bitul de tip close-on-exec poate fi setat pe mânerele țevilor și prizei
De asemenea, mânerele pentru țevi și prize sunt acum supuse comportamentului de close-on-exec determinat
prin variabila specială $^F.

Consultați „Comportament mai consecvent în apropierea executivului”.

Scrierea „$$1” pentru a însemna „${$}1” nu este acceptată
Perl 5.004 a depreciat interpretarea $$1 și similare în interpolated
șiruri de caractere să însemne „$$ . „1””, dar totuși a permis.

În Perl 5.6.0 și versiuni ulterioare, „$$1” înseamnă întotdeauna „${$1}”.

șterge(), fiecare(), valori () si H)"
operați pe aliasuri pentru valori, nu copii

șterge(), fiecare(), valori () și hash-urile (de exemplu, „\(%h)”) într-un context de listă returnează
valorile reale din hash, în loc de copii (cum făceau în versiunile anterioare).
Modurile tipice pentru utilizarea acestor constructe copiază valorile returnate, dar acest lucru poate face
o diferență semnificativă la crearea referințelor la valorile returnate. Cheile în
hash sunt în continuare returnate ca copii atunci când se repetă pe un hash.

Vezi si "șterge(), fiecare(), valori () iar iterația hash este mai rapidă”.

vec(EXPR,OFFSET,BITS) impune puteri de doi BITI
vec() generează o eroare de rulare dacă argumentul BITS nu este o putere validă a doi
întreg.

Textul unor rezultate de diagnosticare s-a modificat
Cele mai multe referințe la operațiunile interne Perl în diagnosticare au fost modificate pentru a fi
mai descriptiv. Aceasta poate fi o problemă pentru programele care se pot baza incorect pe
textul exact al diagnosticului pentru buna functionare.

"%@" a fost indepartat
Variabila specială nedocumentată „%@” care obișnuia să acumuleze erori „de fundal”.
(cum ar fi cele care se întâmplă în DISTRUGE()) a fost eliminat, pentru că ar putea
poate duce la pierderi de memorie.

Între paranteze nu() se comportă ca un operator de listă
Operatorul „nu” se încadrează acum sub „dacă arată ca o funcție, se comportă ca a
regula funcției”.

Ca rezultat, forma dintre paranteze poate fi folosită cu „grep” și „map”. Următoarele
Construcția a fost o eroare de sintaxă înainte, dar funcționează așa cum era de așteptat acum:

grep not($_), @things;

Pe de altă parte, utilizarea „nu” cu o porțiune de listă literală ar putea să nu funcționeze. Următoarele
construcție permisă anterior:

print not (1,2,3)[0];

trebuie scris cu paranteze suplimentare acum:

print not((1,2,3)[0]);

Comportamentul rămâne neafectat atunci când „nu” nu este urmat de paranteze.

Semantica prototipului bareword „(*)” s-a schimbat
Semantica prototipului bareword „*” s-a schimbat. Perl 5.005 întotdeauna constrâns
argumente scalare simple la un typeglob, care nu a fost util în situațiile în care
subrutina trebuie să facă distincția între un scalar simplu și un glob de tip. Noul comportament
este de a nu constrânge argumente bareword la un typeglob. Valoarea va fi întotdeauna vizibilă
fie ca un scalar simplu, fie ca referință la un glob de tip.

Vedeți „Prototip bareword mai funcțional (*)”.

Semantica operatorilor de biți s-ar putea să se fi schimbat pe platformele pe 64 de biți
Dacă platforma dvs. este fie nativă pe 64 de biți, fie dacă Perl a fost configurat pentru utilizare
numere întregi pe 64 de biți, adică $Config{ivsize} este 8, poate exista o potențială incompatibilitate
în comportamentul operatorilor numerici pe biți (& | ^ ~ << >>). Acești operatori obișnuiau
operați strict pe cei 32 de biți inferiori ai numerelor întregi în versiunile anterioare, dar acum
operează pe toată lățimea integrală nativă. În special, rețineți că „~” unar
va produce rezultate diferite pe platforme care au $Config{ivsize} diferit. Pentru
portabilitate, asigurați-vă că mascați biții în exces în rezultatul „~” unar, de exemplu,
„~$x & 0xffffffff”.

Consultați „Operatorii de biți acceptă lățimea întregului întreg nativ”.

Mai multe elemente încorporate le afectează rezultatele
După cum este descris în „Funcții de securitate îmbunătățite”, pot exista mai multe surse de pată într-un
programul Perl.

Pentru a evita aceste noi comportamente contaminante, puteți construi Perl cu opțiunea Configurare
„-Accflags=-DINCOMPLETE_TAINTS”. Atenție că binarul perl care urmează poate fi nesigur.

C Sursa Incompatibilități
„PERL_POLLUTE”
Lansarea 5.005 a acceptat vechile nume de simboluri globale, oferind macrocomenzi de preprocesor
pentru compatibilitatea surselor de extensie. Începând cu versiunea 5.6.0, aceste preprocesoare
definițiile nu sunt disponibile în mod implicit. Trebuie să compilați în mod explicit perl cu
„-DPERL_POLLUTE” pentru a obține aceste definiții. Pentru extensii care încă folosesc vechiul
simboluri, această opțiune poate fi specificată prin MakeMaker:

perl Makefile.PL POLLUTE=1

„PERL_IMPLICIT_CONTEXT”
Această nouă opțiune de compilare oferă un set de macrocomenzi pentru toate funcțiile API, astfel încât un
Argumentul de context implicit interpret/thread este transmis fiecărei funcții API. Ca
rezultatul acestui lucru, ceva de genul „sv_setsv(foo,bar)” echivalează cu o invocare macro care
de fapt se traduce prin ceva de genul „Perl_sv_setsv(my_perl,foo,bar)”. În timp ce aceasta este
în general, se așteaptă să nu aibă probleme semnificative de compatibilitate a surselor
diferența dintre o macro și un apel de funcție reală va trebui luată în considerare.

Asta înseamnă că acolo is o problemă de compatibilitate a surselor ca urmare a acestui fapt, dacă dvs
extensiile încearcă să folosească pointeri către oricare dintre funcțiile API Perl.

Rețineți că problema de mai sus nu este relevantă pentru versiunea implicită a lui Perl, a cărei
interfețele continuă să se potrivească cu cele ale versiunilor anterioare (dar sub rezerva celorlalte opțiuni
descrise aici).

Consultați „Background and PERL_IMPLICIT_CONTEXT” în perlguts pentru informații detaliate despre
ramificațiile construirii Perl cu această opțiune.

NOTĂ: PERL_IMPLICIT_CONTEXT este activat automat de fiecare dată când Perl este construit
cu unul dintre -Dusethreads, -Dusemultiplicity sau ambele. Nu este
destinat să fie activat de utilizatori în acest moment.

„PERL_POLLUTE_MALLOC”
Activarea malloc-ului Perl în versiunea 5.005 și anterioară a cauzat spațiul de nume al
familia de funcții malloc a sistemului urmând a fi uzurpată de versiunile Perl, de la
implicit au folosit aceleași nume. Pe lângă faptul că provoacă probleme pe platformele care nu
permit înlocuirea curată a acestor funcții, aceasta a însemnat și că versiunile de sistem
nu a putut fi apelat în programele care au folosit malloc-ul lui Perl. Versiunile anterioare de Perl
au permis ca acest comportament să fie suprimat cu HIDEMYMALLOC și EMBEDMYMALLOC
definiții ale preprocesorului.

Începând cu versiunea 5.6.0, familia de funcții Malloc a lui Perl are nume implicite distincte
din versiunile de sistem. Trebuie să compilați în mod explicit perl cu
„-DPERL_POLLUTE_MALLOC” pentru a obține comportamentul mai vechi. HIDEMYMALLOC și EMBEDMYMALLOC
nu au niciun efect, deoarece comportamentul pe care l-au activat este acum implicit.

Rețineți că aceste funcții fac nu constituie API-ul de alocare a memoriei Perl. Vezi „Memorie
Alocare" în perlguts pentru mai multe informații despre asta.

Compatibil C Sursa API Modificări
„PACHLEVEL” este acum „PERL_VERSION”
Macrocomenzile cpp „PERL_REVISION”, „PERL_VERSION” și „PERL_SUBVERSION” sunt acum
disponibil implicit din perl.h și reflectă revizuirea de bază, nivelul patch-urilor și
respectiv subversiune. „PERL_REVISION” nu avea echivalent anterior, în timp ce
„PERL_VERSION” și „PERL_SUBVERSION” erau disponibile anterior ca „PACHLEVEL” și
„SUBVERSIUNEA”.

Noile nume provoacă mai puțină poluare a cpp namespace și reflectă ceea ce numerele
au ajuns să reprezinte în practica obișnuită. Pentru compatibilitate, vechile nume sunt încă
susţinut când patchlevel.h este inclus în mod explicit (așa cum este necesar înainte), așa că există
nicio incompatibilitate de sursă de la schimbare.

Binar Incompatibilități
În general, versiunea implicită a acestei versiuni este de așteptat să fie compatibilă cu binar pentru
extensii construite cu versiunea 5.005 sau versiunile sale de întreținere. Cu toate acestea, specific
Este posibil ca platformele să fi rupt compatibilitatea binară din cauza modificărilor setărilor implicite utilizate în
fișiere de indicii. Prin urmare, asigurați-vă că verificați întotdeauna fișierele README specifice platformei
pentru orice notă contrară.

Usethreads-urile sau usemultiplicity build-urile sunt nu binar compatibil cu cel corespunzător
se construiește în 5.005.

Pe platformele care necesită o listă explicită de exporturi (AIX, OS/2 și Windows, printre
altele), simbolurile pur interne, cum ar fi funcțiile parserului și codurile operaționale pentru timpul de rulare, nu sunt
exportate implicit. Perl 5.005 folosit pentru a exporta toate funcțiile, indiferent dacă acestea
au fost considerate parte a API-ului public sau nu.

Pentru lista completă a funcțiilor API publice, consultați perlapi.

Cunoscut Probleme


Localizarea a legat hașiș element Mai scăpa memorie
Începând cu versiunea 5.6.1, există o scurgere cunoscută când se execută un astfel de cod:

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

...

local($tie_hash{Foo}) = 1; # scurgeri

Cunoscut test eşecuri
· build-uri pe 64 de biți

Subtestul #15 al lib/bt poate eșua sub versiuni pe 64 de biți pe platforme precum HP-UX PA64
și Linux IA64. Problema este încă în curs de investigare.

Testul lib/io_multihomed se poate bloca în HP-UX dacă Perl a fost configurat să fie pe 64 de biți.
Deoarece alte platforme pe 64 de biți nu se blochează în acest test, HP-UX este suspect. Toti ceilalti
testele trec în HP-UX pe 64 de biți. Testul încearcă să creeze și să se conecteze la „multihomed”
socket-uri (socket-uri care au mai multe adrese IP).

Rețineți că suportul pe 64 de biți este încă experimental.

· Eșecul testelor de fire

Se știe că subtestele 19 și 20 ale testului lib/thr5005.t eșuează din cauza fundamentală
probleme în implementarea threading-ului 5.005. Acestea nu sunt eșecuri noi - Perl
5.005_0x are aceleași erori, dar nu a avut aceste teste. (Rețineți că suportul pentru
Filetarea în stil 5.005 rămâne experimentală.)

· NEXTSTEP 3.3 Eșecul testului POSIX

În NEXTSTEP 3.3p2 implementarea programului strftime(3) în sistemul de operare
bibliotecile sunt greșite: formatul %j numește zilele unei luni începând de la zero,
care, deși este logic pentru programatori, va provoca subtestele de la 19 la 27 ale
testul lib/posix poate eșua.

· Tru64 (aka Digital UNIX, alias DEC OSF/1) eșec de testare lib/sdbm cu gcc

Dacă este compilat cu gcc 2.95, testul lib/sdbm va eșua (dump core). Leacul este folosirea
furnizorul cc, vine cu sistemul de operare și produce cod bun.

EBCDIC platforme nu complet sprijinite
În versiunile anterioare ale Perl, mediile EBCDIC precum OS390 (cunoscut și ca Open Edition
MVS) și VM-ESA au fost acceptate. Datorită modificărilor cerute de suportul UTF-8 (Unicode),
platformele EBCDIC nu sunt acceptate în Perl 5.6.0.

Versiunea 5.6.1 îmbunătățește suportul pentru platformele EBCDIC, dar acestea nu sunt pe deplin acceptate
încă.

UNICOS/mk CC eşecuri în timpul Configurați alerga
În UNICOS/mk pot apărea următoarele erori în timpul rulării Configurare:

Ghiciți ce simboluri definesc compilatorul și preprocesorul dvs. C...
CC-20 cc: ERROR File = try.c, Line = 3
...
comutator prost yylook 79 comutator rău yylook 79 comutator rău yylook 79 comutator rău yylook 79#ifdef A29K
...
4 erori detectate în compilarea „try.c”.

Vinovatul este awk-ul spart al UNICOS/mk. Efectul este, din fericire, destul de ușor: Perl
în sine nu este afectat negativ de eroare, doar utilitarul h2ph care vine cu Perl și
asta este destul de rar necesar în zilele noastre.

Săgeată operator și matrice
Când argumentul din stânga operatorului săgeată „->” este o matrice sau operatorul „scalar”.
care operează pe o matrice, rezultatul operației trebuie considerat eronat. Pentru
exemplu:

@x->[2]
scalar(@x)->[2]

Aceste expresii vor primi erori de rulare într-o versiune viitoare a Perl.

Experimental caracteristici
După cum sa discutat mai sus, multe caracteristici sunt încă experimentale. Interfețe și implementare
dintre aceste caracteristici pot fi modificate și, în cazuri extreme, chiar pot fi eliminate în
vreo versiune viitoare a Perl. Aceste caracteristici includ următoarele:

Fire
Unicode
Suport pe 64 de biți
Subrutine Lvalue
Referințe slabe
Tipul de date pseudo-hash
Suita Compiler
Implementarea internă a fișierelor globbing
Modulul DB
Codul expresiei regulate construiește:
„(?{ cod })” și „(??{ cod })”

învechit Diagnostics


Sintaxa clasei de caractere [: :] este rezervată pentru extensiile viitoare
(W) În clasele de caractere ale expresiilor regulate ([]), sintaxa care începe cu „[:”
iar terminarea cu „:]” este rezervată pentru extensiile viitoare. Dacă trebuie să reprezentați
acele secvențe de caractere din interiorul unei clase de caractere expresii regulate, citați doar
paranteze drepte cu bara oblică inversă: „\[:” și „:\]”.

Nume logic prost format |%s| în prime_env_iter
(W) Un avertisment specific VMS. Un nume logic a fost întâlnit în timpul pregătirii
iterați peste %ENV care încalcă regulile sintactice care guvernează numele logice. pentru că
nu poate fi tradus normal, este omis și nu va apărea în %ENV. Acest
poate fi un eveniment benign, deoarece unele pachete software ar putea modifica direct logica
tabele de nume și introduceți nume nestandard, sau poate indica un nume logic
tabelul a fost corupt.

În șir, @%s acum trebuie scris ca \@%s
Descrierea acestei erori spunea:

(Într-o zi se va presupune pur și simplu că un @
interpolează o matrice.)

A venit ziua aceea și această eroare fatală a fost înlăturată. A fost înlocuit cu a
avertisment non-fatal în schimb. Consultați „Matricele acum se interpolează întotdeauna în ghilimele duble
șiruri" pentru detalii.

Problemă probabilă de prioritate pe %s
(W) Compilatorul a găsit un cuvânt gol acolo unde se aștepta la un condițional, care adesea
indică faptul că un || sau && a fost analizat ca parte a ultimului argument al precedentului
construi, de exemplu:

deschis FOO || a muri;

expresia regex prea mare
(F) Actuala implementare a expresiilor regulate folosește scurtături ca decalaje de adrese
în cadrul unui șir. Din păcate, aceasta înseamnă că dacă expresia regulată se compilează la
mai lungă de 32767, va exploda. De obicei, atunci când doriți o expresie regulată aceasta
mare, există o modalitate mai bună de a face acest lucru cu mai multe declarații. Vezi perlre.

Utilizarea lui „$$ „ pentru a însemna „${$} " este depreciat
(D) Versiunile Perl înainte de 5.004 au interpretat greșit orice marcator de tip urmat de „$” și un
cifră. De exemplu, „$$0” a fost interpretat incorect ca însemnând „${$}0” în loc de „${$0}”.
Această eroare este (în mare parte) remediată în Perl 5.004.

Cu toate acestea, dezvoltatorii Perl 5.004 nu au putut remedia complet acest bug, deoarece la
cel puțin două module utilizate pe scară largă depind de vechea semnificație a „$$0” dintr-un șir. Deci Perl
5.004 încă interpretează „$$ " în modul vechi (rupt) în interiorul șirurilor; dar acesta
generează acest mesaj ca avertisment. Și în Perl 5.005, acest tratament special va
înceta.

Raportarea Bugs


Dacă găsiți ceea ce credeți că este o eroare, puteți verifica articolele postate recent pe
grup de știri comp.lang.perl.misc. Pot exista și informații la http://www.perl.com/ ,
pagina de pornire Perl.

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

Utilizați perl561delta online folosind serviciile onworks.net


Servere și stații de lucru gratuite

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

Comenzi Linux

Ad




×
publicitate
❤️Cumpără, rezervă sau cumpără aici — gratuit, contribuind la menținerea serviciilor gratuite.