GoGPT Best VPN GoSearch

Icône de favori OnWorks

perl5220delta - En ligne dans le Cloud

Exécutez perl5220delta dans le fournisseur d'hébergement gratuit OnWorks sur Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

Il s'agit de la commande perl5220delta qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS

PROGRAMME:

Nom


perl5220delta - Quoi de neuf pour perl v5.22.0

DESCRIPTION


Ce document décrit les différences entre la version 5.20.0 et la version 5.22.0.

Si vous effectuez une mise à niveau à partir d'une version antérieure telle que 5.18.0, lisez d'abord perl5200delta,
qui décrit les différences entre 5.18.0 et 5.20.0.

Core Améliorations


New bit à bit opérateurs
Une nouvelle fonctionnalité expérimentale a été ajoutée qui rend les quatre opérateurs bit à bit standard
("& | ^ ~") traitent leurs opérandes de manière cohérente comme des nombres et introduisent quatre nouveaux points
opérateurs (« &. |. ^. ~. ») qui traitent leurs opérandes de manière cohérente comme des chaînes.
s'applique aux variantes d'affectation ("&= |= ^= &.= |.= ^.=").

Pour l'utiliser, activez la fonctionnalité « bitwise » et désactivez les avertissements « experimental::bitwise »
Catégorie. Voir « Opérateurs de chaînes au niveau du bit » dans perlop pour plus de détails. [perl #123466]
.

New double diamant opérateur
« <<>> » est similaire à « <> », mais utilise trois arguments « open » pour ouvrir chaque fichier dans @ARGV. Cela signifie
que chaque élément de @ARGV sera traité comme un nom de fichier réel, et "|foo" ne le sera pas
traité comme un tuyau ouvert.

New "\b" frontières in Standard expressions
"qr/\b{gcb}/"

« gcb » signifie « Grapheme Cluster Boundary ». C'est une propriété Unicode qui permet de trouver la
limite entre des séquences de caractères qui ressemblent à un seul caractère pour un natif
locuteur d'une langue. Perl a depuis longtemps la capacité de gérer ces problèmes grâce à l'attribut « \X ».
Séquence d'échappement standard. Il existe désormais une autre façon de gérer ces séquences. Voir « \b{},
\b, \B{}, \B" dans perlrebackslash pour plus de détails.

"qr/\b{wb}/"

« wb » signifie « Word Boundary ». C'est une propriété Unicode qui détermine la limite entre
mots. Ceci est similaire au simple « \b » (sans accolades), mais est plus adapté
traitement du langage naturel. Il sait, par exemple, que des apostrophes peuvent apparaître dans
milieu des mots. Voir « \b{}, \b, \B{}, \B » dans perlrebackslash pour plus de détails.

"qr/\b{sb}/"

« sb » signifie « Sentence Boundary ». Il s'agit d'une propriété Unicode facilitant l'analyse syntaxique naturelle.
phrases linguistiques. Voir « \b{}, \b, \B{}, \B » dans perlrebackslash pour plus de détails.

Non capturant Régulier Expression Drapeau
Les expressions régulières prennent désormais en charge un indicateur « /n » qui désactive la capture et le remplissage de $1, $2,
etc à l'intérieur des groupes :

"bonjour" =~ /(salut|bonjour)/n; # $1 n'est pas défini

Cela équivaut à mettre « ?: » au début de chaque groupe de capture.

Voir "n" dans perlre pour plus d'informations.

"utilisation re 'strict'"
Cela applique des règles de syntaxe plus strictes aux modèles d'expressions régulières compilés dans son
portée. Cela vous alertera, espérons-le, des fautes de frappe et autres comportements involontaires
des problèmes de compatibilité descendante nous empêchent de générer des rapports dans une expression régulière normale
compilations. Le comportement de cette fonction est susceptible d'évoluer dans les futures versions de Perl.
à mesure que nous gagnons en expérience, l'utilisation de ce pragma générera un avertissement de catégorie
« experimental::re_strict ». Voir « strict » dans re.

Unicode 7.0 (avec correction) is maintenant soutenu
Pour plus de détails sur le contenu de cette version, voir
<http://www.unicode.org/versions/Unicode7.0.0/>. La version d'Unicode 7.0 qui vient
avec Perl inclut une correction concernant la mise en forme des glyphes en arabe (voir
<http://www.unicode.org/errata/#errata_actuel>).

"utilisation lieu" Vous pouvez restreindre qui local catégories sommes-nous affecté
Il est désormais possible de passer un paramètre à « utiliser les paramètres régionaux » pour spécifier un sous-ensemble de paramètres régionaux
Les catégories doivent être adaptées aux paramètres régionaux, les autres restant inchangées. Voir « Utiliser les paramètres régionaux »
pragma" dans perllocale pour plus de détails.

Perl maintenant supports POSIX 2008 local monnaie ajouts
Sur les plateformes capables de gérer POSIX.1-2008, le hachage renvoyé par
"POSIX::localeconv()" inclut les champs de devises internationales ajoutés par cette version de
la norme POSIX. Il s'agit de « int_n_cs_precedes », « int_n_sep_by_space »,
"int_n_sign_posn", "int_p_cs_precedes", "int_p_sep_by_space" et "int_p_sign_posn".

Rapidité Heuristiques on plus plates-formes pour détermination local UTF-8
Sur les plateformes qui n'implémentent ni la norme C99 ni la norme POSIX 2001,
Déterminer si la langue actuelle est UTF-8 ou non dépend d'heuristiques.
amélioré dans cette version.

Aliasing via référence
Les variables et les sous-routines peuvent désormais être aliasées en les affectant à une référence :

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

L'aliasing peut également être réalisé en utilisant une barre oblique inverse avant un itérateur « foreach »
variable ; c'est peut-être l'idiome le plus utile que cette fonctionnalité fournit :

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

Cette fonctionnalité est expérimentale et doit être activée via « Utiliser la fonctionnalité 'refaliasing' ». Elle
avertir sauf si la catégorie d'avertissements « experimental::refaliasing » est désactivée.

Voir « Affectation aux références » dans perlref

"prototype" avec aucune arguments
« prototype() » sans argument déduit désormais $_. [perl #123514]
.

New ":const" sous-programme attribuer
L'attribut « const » peut être appliqué à une sous-routine anonyme. Il force la nouvelle sous-routine à
être exécuté immédiatement dès qu'un élément est créé (à lorsque l'expression « sub » est
(évaluée). Sa valeur est capturée et utilisée pour créer une nouvelle sous-routine constante qui est
renvoyé. Cette fonctionnalité est expérimentale. Voir « Fonctions constantes » dans perlsub.

"fileno" maintenant fonctionne-t-il ? on annuaire poignées
Lorsque le support approprié est disponible dans le système d'exploitation, le « fileno » intégré est désormais disponible.
fonctionne sur les descripteurs de répertoire, produisant le descripteur de fichier sous-jacent de la même manière que pour
descripteurs de fichiers. Sur les systèmes d'exploitation ne prenant pas en charge cette fonctionnalité, « fileno » sur un descripteur de répertoire
continue de renvoyer la valeur indéfinie, comme auparavant, mais définit également $! pour indiquer que le
l'opération n'est pas prise en charge.

Actuellement, cela utilise soit un membre « dd_fd » dans la structure « DIR » du système d'exploitation, soit un dirfd(3)
fonction telle que spécifiée par POSIX.1-2008.

Liste un formulaire de candidature dûment rempli of pipe ouvert mis en œuvre pour Win32
La forme de liste du tuyau :

ouvre mon $fh, "-|", "programme", @arguments;

est désormais implémenté sous Win32. Il présente les mêmes limitations que « system LIST » sous Win32, car
l'API Win32 n'accepte pas les arguments du programme sous forme de liste.

Affectation à liste répétition
"(...) x ..." peut désormais être utilisé dans une liste à laquelle il est assigné, à condition que la partie gauche
side est une lvalue valide. Cela permet d'écrire « (undef,undef,$foo) = that_function() ».
comme "((undef)x2, $foo) = that_function()".

Infinity et NaN (pas-un-numéro) manipulation amélioré
Les valeurs à virgule flottante peuvent contenir les valeurs spéciales infini, infini négatif et
NaN (pas un nombre). Nous reconnaissons et propageons désormais plus efficacement la valeur dans
calculs, et en sortie les normaliser aux chaînes « Inf », « -Inf » et « NaN ».

Voir également les améliorations POSIX.

Flottant point analyse a était amélioré
L'analyse et l'impression des valeurs à virgule flottante ont été améliorées.

En tant que fonctionnalité entièrement nouvelle, les littéraux à virgule flottante hexadécimaux (comme « 0x1.23p-4 ») sont
Désormais pris en charge, ils peuvent être générés avec « printf "%a" ». Voir « Constructeurs de valeurs scalaires ».
dans perldata pour plus de détails.

Emballage infini or pas-un-numéro développement a caractère is maintenant fatal
Auparavant, lorsqu'on essayait d'insérer l'infini ou un nombre non-nombre dans un caractère (signé), Perl
avertir, et supposer que vous avez essayé de compresser 0xFF ; si vous l'avez donné comme argument à « chr », « U+FFFD »
a été retourné.

Mais maintenant, toutes ces actions (« pack », « chr » et « print '%c' ») entraînent une erreur fatale.

Expérimental C Retour arrière API
Perl prend désormais en charge (via une API de niveau C) la récupération de la trace de niveau C (similaire à ce que
les débogueurs symboliques comme le font gdb).

Le backtrace renvoie la trace de la pile des trames d'appel C, avec les noms des symboles
(noms de fonctions), les noms d'objets (comme « perl ») et, si possible, également le code source
emplacements (fichier:ligne).

Les plates-formes prises en charge sont Linux et OS X (certains *BSD peuvent fonctionner au moins en partie, mais ils
n'ont pas encore été testés).

La fonctionnalité doit être activée avec « Configure -Dusecbacktrace ».

Voir « C backtrace » dans perlhacktips pour plus d'informations.

Sécurité


Perl is maintenant compilé avec « -fstack-protector-strong » if disponibles
Perl a été compilé avec l'option anti-écrasement de pile « -fstack-protector » depuis
5.10.1. Perl utilise désormais la nouvelle variante appelée « -fstack-protector-strong », si elle est disponible.

Le manuel de formation Safe module pourriez permettre au contrôle Forfaits à be remplacé
Correction d'un bug critique : les paquets externes peuvent être remplacés. Safe a été mis à jour vers la version 2.38.
Répondez à cela.

Perl is maintenant toujours compilé avec "-D_FORTIFY_SOURCE=2" if disponibles
L'option de « renforcement du code » appelée « _FORTIFY_SOURCE », disponible dans gcc 4.*, est désormais toujours
utilisé pour compiler Perl, si disponible.

Notez que ce n'est pas nécessairement une étape énorme puisque sur de nombreuses plateformes, cette étape avait déjà été franchie.
a été prise il y a plusieurs années : de nombreuses distributions Linux (comme Fedora) l'utilisent
option pour Perl, et OS X a imposé la même chose depuis de nombreuses années.

Incompatible Modifications


Sous-programme signatures déménagé avant attributs
La fonctionnalité de sous-signatures expérimentales, introduite dans la version 5.20, analysait les signatures après
attributs. Dans cette version, suite aux retours des utilisateurs de la fonctionnalité expérimentale,
le positionnement a été déplacé de telle sorte que les signatures apparaissent après le nom du sous-programme (si
tout) et avant la liste d'attributs (le cas échéant).

"&" et "\&" prototypes accepte uniquement sous-marins
Le caractère prototype « & » accepte désormais uniquement les sous-titres anonymes (« sub {...} »), les choses
commençant par « \& », ou un « undef » explicite. Auparavant, il autorisait également, par erreur,
références aux tableaux, hachages et listes. [perl #4539]
. [perl #4539]
. [perl #123062]
.

De plus, le prototype « \& » autorisait les appels de sous-routines, alors que maintenant il ne permet que
sous-routines : &foo est toujours autorisé comme argument, tandis que « &foo() » et « foo() » ne le sont plus
sont. [perl #77860] .

"utilisation codage" is maintenant lexical
L'effet du pragma d'encodage est désormais limité à la portée lexicale. Ce pragma est obsolète.
mais en attendant, cela pourrait avoir un impact négatif sur les modules non liés qui sont inclus dans le
même programme ; ce changement corrige cela.

Liste tranches retour vide listes
Les tranches de liste renvoient désormais une liste vide uniquement si la liste d'origine était vide (ou s'il y a
(aucun indice). Auparavant, une tranche de liste renvoyait une liste vide si tous les indices étaient supprimés.
en dehors de la liste d'origine ; maintenant, il renvoie une liste de valeurs « undef » dans ce cas. [perl
#114498] .

"\N{}" avec a séquence of plusieurs surpeuplés is maintenant a fatal erreur
Par exemple : « \N{TROP D'ESPACES} » ou « \N{ESPACE DE FIN} ». Cette option est obsolète depuis.
v5.18.

"utilisation UNIVERSEL '...'" is maintenant a fatal erreur
L'importation de fonctions depuis « UNIVERSAL » est obsolète depuis la version 5.12 et constitue désormais un problème fatal.
erreur. "utiliser UNIVERSAL" sans aucun argument est toujours autorisé.

In guillemets doubles "\cX", X doit maintenant be a imprimable ASCII caractère
Dans les versions précédentes, le fait de ne pas le faire entraînait un avertissement d'obsolescence.

Scission le tokens "(?" et "(*" in Standard expressions is maintenant a fatal compilation Erreur.
Ceux-ci étaient obsolètes depuis la version 5.18.

"qr/foo/x" maintenant ne tient pas compte tous Unicode modèle blanc espace
Le modificateur d'expression régulière "/x" permet au motif de contenir des espaces blancs et
commentaires (tous deux ignorés) pour une meilleure lisibilité. Jusqu'à présent, tous les
Les caractères d'espacement désignés par Unicode à cette fin ont été traités.
les autres désormais reconnus sont :

U+0085 LIGNE SUIVANTE
MARQUE GAUCHE-DROITE U+200E
MARQUE DE DROITE A GAUCHE U+200F
SÉPARATEUR DE LIGNE U+2028
SÉPARATEUR DE PARAGRAPHES U+2029

L'utilisation de ces caractères avec « /x » en dehors des classes de caractères entre crochets et lorsqu'ils ne le sont pas
précédé d'une barre oblique inverse a généré un avertissement d'obsolescence depuis la version 5.18. Ils seront désormais
ignoré.

Commentaires lignes dans les "(?[ ])" sommes-nous maintenant terminé uniquement by a "\n"
« (?[ ]) » est une fonctionnalité expérimentale, introduite dans la version 5.18. Elle fonctionne comme si « /x » était
Toujours activé. Mais il y avait une différence : les lignes de commentaires (après le caractère « # »)
étaient terminés par tout ce qui correspond à « \R », ce qui inclut tous les espaces verticaux, tels que
Sauts de page. Par souci de cohérence, ce paramètre a été modifié pour correspondre à la fin des lignes de commentaires.
en dehors de "(?[ ])", à savoir un "\n" (même s'il est échappé), qui est le même que ce qui termine un
chaîne et formats heredoc.

"(?[...])" opérateurs maintenant suivre Standard Perl priorité
Cette fonctionnalité expérimentale permet d'effectuer des opérations sur des ensembles dans des modèles d'expressions régulières. Avant
ceci, l'opérateur d'intersection avait la même priorité que les autres opérateurs binaires.
Sa priorité est désormais plus élevée. Cela pourrait entraîner des résultats différents du code existant.
s'attend à ce que (bien que la documentation ait toujours noté que ce changement pourrait se produire,
(Il est recommandé de mettre les expressions entièrement entre parenthèses). Voir « Caractère entre parenthèses étendu »
Classes" dans perlrecharclass.

Omettre "%" et "@" on hachage et tableau noms is aucune plus long permis
Le très vieux Perl vous permettait d'omettre le "@" sur les noms de tableaux et le "%" sur les noms de hachage dans certains cas.
taches. Ceci a émis un avertissement d'obsolescence depuis Perl 5.000, et n'est plus
permis.

"$!" texte is maintenant in Anglais au contrôle le portée of "utilisation lieu"
Auparavant, le texte, contrairement à presque tout le reste, était toujours rédigé en fonction de l'actualité.
Paramètres régionaux sous-jacents du programme. (Sur certains systèmes, « $^E » est également affecté.) Pour les programmes
qui ne sont pas préparés à gérer les différences de paramètres régionaux, cela peut entraîner l'affichage de texte indésirable.
affiché. Il est préférable d'afficher du texte traduisible via un outil plutôt que du texte inutile.
texte qui est beaucoup plus difficile à comprendre.

"$!" texte vont be revenu in UTF-8 quand approprié
La stringification de $! et $^E aura l'indicateur UTF-8 défini lorsque le texte est réellement
UTF-8 non-ASCII. Cela permettra aux programmes configurés pour prendre en compte les paramètres régionaux de fonctionner correctement.
afficher les messages dans la langue maternelle de l'utilisateur. Code devant continuer la version 5.20 et
un comportement antérieur peut effectuer la stringification dans les portées de « utiliser des octets » et
« utiliser les paramètres régionaux : messages ». Dans ces deux portées, aucune autre opération Perl ne sera effectuée.
affecté par les paramètres régionaux ; seules les chaînes $! et $^E sont utilisées. Le pragma « bytes » provoque l'utilisation de l'UTF-8.
L'indicateur ne doit pas être activé, comme dans les versions précédentes de Perl. Ceci résout [perl #112208]
.

Assistance pour "?SCHÉMA?" sans explicite opérateur a était enlevé
La construction « m?PATTERN? », qui permet de faire correspondre une expression régulière une seule fois, avait auparavant un
forme alternative qui a été écrite directement avec un point d'interrogation comme délimiteur, en omettant le
Opérateur « m » explicite. Cette utilisation a généré un avertissement d'obsolescence depuis la version 5.14.0.
maintenant une erreur de syntaxe, afin que le point d'interrogation puisse être disponible pour une utilisation dans de nouveaux opérateurs.

"défini(@array)" et "défini(%hash)" sommes-nous maintenant fatal erreurs
Ceux-ci sont obsolètes depuis la v5.6.1 et ont généré des avertissements d'obsolescence depuis la v5.16.

En utilisant a hachage or an tableau as a référence sommes-nous maintenant fatal erreurs
Par exemple, « %foo->{"bar"} » provoque désormais une erreur de compilation fatale. Ces erreurs ont été
obsolète depuis avant la version 5.8 et a émis des avertissements d'obsolescence depuis lors.

Modifications à le "*" prototype
Le caractère « * » dans le prototype d'une sous-routine permettait aux mots nus d'avoir la priorité
sur la plupart des noms de sous-routines, mais pas tous. Ce n'était jamais cohérent et présentait des bugs.
comportement.

Maintenant, cela a été modifié, donc les sous-routines ont toujours la priorité sur les mots nus, ce qui
le met en conformité avec des fonctions intégrées prototypées de manière similaire :

sous-éclaboussure(*) { ... }
sous foo { ... }
splat(foo); # maintenant toujours splat(foo())
splat(bar); # toujours splat('bar') comme avant
fermer(foo); # fermer(foo())
fermer(bar); # fermer('bar')

Dépréciations


Paramètres "${^ENCODAGE}" à quoi que ce soit d'artificiel mais "undef"
Cette variable permet d'écrire des scripts Perl dans un encodage autre que ASCII ou UTF-8.
Cependant, cela affecte tous les modules à l'échelle mondiale, ce qui entraîne des réponses erronées et une segmentation
Défauts. Les nouveaux scripts doivent être écrits en UTF-8 ; les anciens scripts doivent être convertis en UTF-8.
ce qui est facilement réalisé avec l'utilitaire piconv.

Utilisez le of non graphique caractères in caractère unique variable noms
La syntaxe des noms de variables à un seul caractère est plus indulgente que celle des variables plus longues.
noms, permettant au nom à un caractère d'être un caractère de ponctuation ou même invisible (un
(non graphique). Perl v5.20 a déconseillé les contrôles de plage ASCII en tant que tels. Désormais, tous
Les caractères non graphiques, autrefois autorisés, sont désormais obsolètes. L'effet pratique de
cela se produit uniquement lorsque l'option « utiliser utf8 » n'est pas activée et affecte uniquement les contrôles C1 (points de code)
0x80 à 0xFF), ESPACE INSÉPARABLE et TIRE D'ARTICLE LÉGER.

Inline of "sous () { $var }" avec observable Effets secondaires
Dans de nombreux cas, Perl transforme « sub () { $var } » en une sous-routine constante inlinable,
la capture de la valeur de $var au moment de l'évaluation de l'expression « sub ». Ceci peut entraîner une erreur.
le comportement de fermeture dans les cas où $var est ultérieurement modifié, puisque le
La sous-routine ne renverra pas la valeur modifiée. (Notez que tout cela ne s'applique qu'aux opérations anonymes
sous-routines avec un prototype vide ("sub()").)

Cette utilisation est désormais obsolète dans les cas où la variable pourrait être modifiée
ailleurs. Perl détecte ces cas et émet un avertissement d'obsolescence. Un tel code
il est probable que cela change dans le futur et cesse de produire une constante.

Si votre variable n'est modifiée qu'à l'endroit où elle est déclarée, alors Perl
continuer à rendre le sous-marin inlinable sans avertissement.

sous make_constant {
mon $var = shift;
retour sub() { $var }; # bien
}

sous make_constant_deprecated {
mon $var ;
$var = décalage;
return sub() { $var }; # obsolète
}

sous make_constant_deprecated2 {
mon $var = shift;
log_that_value($var); # pourrait modifier $var
return sub() { $var }; # obsolète
}

Dans le deuxième exemple ci-dessus, détecter que $var n'est assigné qu'une seule fois est trop difficile à
détecter. Que cela se produise ailleurs que dans la déclaration « my » suffit à Perl pour
je trouve ça suspect.

Cet avertissement d'obsolescence ne se produit que pour une variable simple pour le corps du sous-programme. (A
Le bloc « BEGIN » ou l’instruction « use » à l’intérieur du sous-ensemble est ignoré, car il ne devient pas
partie du corps du sous-marin.) Pour les cas plus complexes, tels que
"sub() { do_something() if 0; $var }" le comportement a changé de telle sorte que l'inlining ne
Cela ne se produit pas si la variable est modifiable ailleurs. De tels cas devraient être rares.

Utilisez le of plusieurs "/ X" regexp modificateurs
Il est désormais déconseillé de dire quelque chose comme l'un des éléments suivants :

qr/foo/xx;
/(?xax:foo)/;
utiliser re qw(/amxx);

Autrement dit, désormais, « x » ne devrait apparaître qu’une seule fois dans une chaîne d’expressions régulières contiguës.
Modificateurs de modèle. Nous ne pensons pas que ce problème soit présent dans l'ensemble du CPAN.
Ceci est en préparation pour une future version de Perl ayant "/xx" permettant l'espace blanc pour
lisibilité dans les classes de caractères entre crochets (celles entre crochets : « [...] »).

En utilisant a SANS RUPTURE espace in a caractère alias pour "\N{...}" is maintenant obsolète
Ce caractère non graphique est essentiellement indiscernable d'un espace régulier, et donc
ne devrait pas être autorisé. Voir « ALIAS PERSONNALISÉS » dans les noms de caractères.

A littéral "{" devrait maintenant be échappé in a modèle
Si vous voulez une accolade gauche littérale (également appelée accolade gauche) dans un
modèle d'expression, vous devez maintenant l'échapper en le précédant d'une barre oblique inverse
("\{") ou en l'entourant de crochets "[{]", ou en utilisant "\Q" ; sinon un
Un avertissement d'obsolescence sera émis. Cette fonctionnalité avait été initialement annoncée pour la version 5.16.
version ; elle permettra de futures extensions du langage.

Fabrication tous avertissements fatal is découragé
La documentation relative aux avertissements fatals indique que « utiliser les avertissements FATAL => 'all' » est
découragé et fournit un langage plus fort sur les risques d'avertissements mortels en général.

Arts de la scène Améliorations


· Si le nom d'une méthode ou d'une classe est connu au moment de la compilation, un hachage est précalculé pour accélérer
Recherche de méthode d'exécution. De plus, les noms de méthodes composées comme « SUPER::new » sont analysés à
au moment de la compilation, pour éviter d'avoir à les analyser au moment de l'exécution.

· Recherches de tableaux et de hachages (en particulier imbriqués) qui utilisent uniquement des constantes ou des valeurs simples
Les variables comme clés sont désormais considérablement plus rapides. Voir « Modifications internes » pour plus d'informations.
détails.

· « (...)x1 », « ("constant")x0 » et « ($scalar)x0 » sont désormais optimisés dans un contexte de liste. Si
l'argument de droite est une constante 1, l'opérateur de répétition disparaît. Si le
l'argument de droite est une constante 0, l'expression entière est optimisée à vide
liste, à condition que l'argument de gauche soit un simple scalaire ou une constante. (C'est-à-dire,
"(foo())x0" n'est pas soumis à cette optimisation.)

· L'affectation « substr » est désormais optimisée en « substr » à 4 arguments à la fin d'un
sous-routine (ou comme argument de « retour »). Auparavant, cette optimisation ne
s'est produit dans un contexte vide.

· Dans "\L...", "\Q...", etc., l'opération supplémentaire "stringify" est désormais optimisée, ce qui rend
ceux-ci sont tout aussi rapides que "lcfirst", "quotemeta", etc.

L'affectation à une liste vide est désormais parfois plus rapide. En particulier, elle n'appelle jamais
"FETCH" sur les arguments liés du côté droit, alors qu'avant c'était parfois le cas.

· Il y a une amélioration des performances allant jusqu'à 20 % lorsque « longueur » est appliquée à un non-
chaîne magique, non liée, et soit « utiliser des octets » est dans la portée, soit la chaîne n'utilise pas
UTF-8 en interne.

· Sur la plupart des versions Perl avec des entiers 64 bits, l'utilisation de la mémoire pour les opérations non magiques et non liées
les scalaires contenant uniquement une valeur à virgule flottante ont été réduits de 8 à 32
octets, selon le système d'exploitation.

· Dans "@array = split", l'affectation peut être optimisée, de sorte que "split" écrit
directement au tableau. Cette optimisation ne se produisait que pour les tableaux de packages autres que
que @_, et seulement parfois. Cette optimisation se produit presque tout le temps.

· « join » est désormais sujet à un repliement constant. Par exemple, « join "-", "a", "b" » est
converti à la compilation en « ab ». De plus, « join » avec un scalaire ou une constante pour
le séparateur et une liste à élément unique à joindre sont simplifiés en une stringification, et
le séparateur n'est même pas évalué.

« qq(@array) » est implémenté à l'aide de deux opérations : une opération de conversion de chaîne et une opération de jointure. Si « qq »
ne contient rien d'autre qu'un seul tableau, la stringification est optimisée.

· « notre $var » et « notre($s,@a,%h) » dans un contexte vide ne sont plus évalués au moment de l'exécution.
Même une séquence entière d'instructions « our $foo; » sera simplement ignorée.
s'applique aux variables « d'état ».

· De nombreuses fonctions internes ont été refactorisées pour améliorer les performances et réduire leur
empreintes mémoire. [perl #121436]
[perl #121906] [perl #121906]


· Les tests de fichiers « -T » et « -B » reviendront plus tôt lorsqu'un fichier vide est détecté. [perl
#121489]

· Les recherches de hachage où la clé est une constante sont plus rapides.

· Les sous-routines avec un prototype vide et un corps contenant uniquement « undef » sont désormais
éligible à l'intégration. [perl #122728]


· Les sous-routines des packages n'ont plus besoin d'être stockées dans des typeglobs : déclarer un
la sous-routine placera désormais une sous-référence simple directement dans la réserve si possible,
économiser de la mémoire. Le typeglob existe toujours théoriquement, donc y accéder provoquera
entrée de réserve à mettre à niveau vers un typeglob (à il s'agit simplement d'une implémentation interne
(détail). Cette optimisation ne s'applique actuellement pas aux XSUB ni aux sous-routines exportées,
et les appels de méthode l'annuleront, car ils mettent en cache des éléments dans des typeglobs. [perl #120441]


· Les fonctions « utf8::native_to_unicode() » et « utf8::unicode_to_native() » (voir utf8)
sont désormais optimisés sur les plateformes ASCII. Il n'y a même plus de performance minimale.
succès lors de l'écriture de code portable entre les plates-formes ASCII et EBCDIC.

· Win32 Perl utilise 8 Ko de mémoire par processus de moins qu'auparavant pour chaque processus Perl,
car certaines données sont désormais mappées en mémoire à partir du disque et partagées entre les processus du
même binaire perl.

Modules et Pragmatique


Le kit de préparation mis à jour Modules et Pragmatique
De nombreuses bibliothèques distribuées avec Perl ont été mises à jour depuis la version 5.20.0.
liste complète des modifications, exécutez :

liste de cœurs --diff 5.20.0 5.22.0

Vous pouvez également substituer votre version préférée à la place de 5.20.0.

Parmi les changements notables, on peut citer :

· Archive::Tar a été mis à niveau vers la version 2.04.

Les tests peuvent désormais être exécutés en parallèle.

· les attributs ont été mis à niveau vers la version 0.27.

L'utilisation de "memEQs" dans le XS a été corrigée. [perl #122701]


Évitez de lire au-delà de la fin d'un tampon. [perl #122629]

· B a été mis à niveau vers la version 1.58.

Il fournit une nouvelle fonction « B::safename », basée sur la fonction existante « B::GV->SAFENAME »,
qui convertit "\cOPEN" en "^OPEN".

Les COP annulés sont désormais de classe « B::COP », plutôt que « B::OP ».

Les objets « B::REGEXP » fournissent désormais une méthode « qr_anoncv » pour accéder au CV implicite
associés à des éléments « qr// » contenant des blocs de code et une méthode « compflags » qui
renvoie les drapeaux pertinents provenant de l'opération « qr//blahblah ».

« B::PMOP » fournit désormais une méthode « pmregexp » renvoyant un objet « B::REGEXP ». Deux nouveaux
les classes « B::PADNAME » et « B::PADNAMELIST » ont été introduites.

Un bug où, après une création d'ithread ou un pseudofork, les SV spéciaux/immortels dans le
l'enfant ithread/psuedoprocess n'avait pas la classe correcte de « B::SPECIAL », a été
corrigé. Les méthodes PADLIST « id » et « outid » ont été ajoutées.

· B::Concise a été mis à niveau vers la version 0.996.

Les opérations nulles qui font partie de la chaîne d'exécution reçoivent désormais des numéros de séquence.

Les drapeaux privés pour les opérations annulées sont désormais supprimés avec des mnémoniques comme ils le seraient pour le
homologues non nuls.

· B::Deparse a été mis à niveau vers la version 1.35.

Il analyse désormais correctement « +sub : attr { ... } » au début d'une instruction. Sans
le "+" initial, "sub" serait une étiquette d'instruction.

Les blocs « BEGIN » sont désormais émis au bon endroit la plupart du temps, mais le changement
malheureusement introduit une régression, dans la mesure où les blocs « BEGIN » se produisent juste avant
la fin du bloc englobant peut apparaître en dessous.

"B::Deparse" ne met plus de "local" erroné ici et là, comme pour "LIST =
tr/a//d". [perl #119815]

Les instructions « use » adjacentes ne sont plus imbriquées accidentellement si l'une d'elles contient un « do ».
bloc. [perl #115066]

Les tableaux entre parenthèses dans les listes passées à « \" » sont désormais correctement séparés par
parenthèses (par exemple, "\(@a, (@b), @c)" conserve désormais les parenthèses autour de @b), donc
préservant le comportement d'aplatissement des tableaux référencés entre parenthèses. Auparavant,
ne fonctionnait que pour un seul tableau : "\(@a)".

« local our » est désormais correctement décomposé, avec le « our » inclus.

« for($foo; !$bar; $baz) {...} » a été analysé sans le « ! » (ou « not »). Ceci a été
fixé.

Les mots-clés principaux qui entrent en conflit avec les sous-routines lexicales sont désormais séparés avec le
Préfixe « CORE:: ».

"foreach state $x (...) {...}" s'analyse désormais correctement avec "state" et non "my".

"our @array = split(...)" se décompose désormais correctement avec "our" dans les cas où le
l'affectation est optimisée.

Il décompose désormais « notre(LISTE)" et tapé lexicalement (« mon chien $spot ») correctement.

Analyser $#_ comme cela plutôt que comme $#{_}. [perl #123947]


Les blocs BEGIN à la fin de la portée englobante sont désormais décomposés au bon endroit.
[perle #77452]

Les blocs BEGIN étaient parfois décomposés en __ANON__, mais sont désormais toujours appelés BEGIN.

Les sous-routines lexicales sont désormais entièrement analysées. [perl #116553]

« Tout =~ y///r » avec « /r » n’omet plus l’opérande de gauche.

Les arbres opérationnels qui composent les blocs de code regexp sont désormais réellement décomposés. Auparavant,
La chaîne d'origine de l'expression régulière a été utilisée, ce qui a entraîné des problèmes.
avec "qr/(?{<
[perl #123217] [perl #115256]

$; à la fin d'une instruction ne perd plus son point-virgule. [perl #123357]

Certains cas de déclarations de sous-routines stockées dans la réserve sous forme abrégée étaient
omis.

Les caractères non-ASCII sont désormais systématiquement échappés dans les chaînes, au lieu de certains des
temps. (Il existe encore des problèmes en suspens avec les expressions régulières et les identifiants
qui n'ont pas été corrigés.)

Lorsque les sous-appels de prototype sont séparés par « & » (par exemple, sous la -P option), "scalaire"
est désormais ajouté le cas échéant, pour forcer le contexte scalaire impliqué par le prototype.

"require(foo())", "do(foo())", "goto(foo())" et constructions similaires avec contrôles de boucle
sont désormais correctement décomposés. Les parenthèses extérieures ne sont pas facultatives.

Les espaces ne sont plus échappés dans les expressions régulières, car ils devenaient
échappé par erreur dans les sections « (?x:...) ».

"sub foo { foo() }" est désormais séparé par ces parenthèses obligatoires.

"/@array/" est désormais analysé comme une expression régulière, et pas seulement @array.

"/@{-}/", "/@{+}/" et $#{1} sont désormais séparés par les accolades, qui sont obligatoires dans
ces cas.

Lors de l'analyse des bundles de fonctionnalités, « B::Deparse » émettait d'abord « no feature; » au lieu de
« aucune fonctionnalité » : all ; ». Ce problème a été corrigé.

"chdir FH" est désormais séparé sans guillemets.

« \my @a » est désormais décomposé sans parenthèses. (Les parenthèses aplatiraient le tableau.)

Les instructions « system » et « exec » suivies d'un bloc sont désormais correctement analysées. Auparavant,
c'était un "do" erroné avant le blocage.

"utiliser la constante QR => qr/.../flags" suivi de """ =~ QR" n'est plus sans le
drapeaux.

Analyse de « BEGIN { undef &foo } » avec le -w l'interrupteur activé a commencé à émettre
Avertissements « non initialisé » dans Perl 5.14. Ce problème a été corrigé.

L'analyse des appels aux sous-ensembles avec un prototype « (;+) » a donné lieu à une boucle infinie.
Les prototypes "(;$") "(_)" et "(;_)" ont reçu une priorité incorrecte, ce qui a entraîné
"foo($a<$b)" à analyser sans les parenthèses.

Deparse fournit désormais un sous-état défini dans les sous-états internes.

· B::Op_private a été ajouté.

B::Op_private fournit des informations détaillées sur les indicateurs utilisés dans « op_private »
champ des opcodes perl.

· bigint, bignum, bigrat ont été mis à niveau vers la version 0.39.

Document dans les AVERTISSEMENTS indiquant que l'utilisation de chaînes comme nombres n'invoquera pas toujours le grand nombre
surcharge et comment l'invoquer. [rt.perl.org #123064]

· Carp a été mis à niveau vers la version 1.36.

"Carp::Heavy" ignore désormais les incompatibilités de version avec Carp si Carp est plus récent que 1.12,
puisque les entrailles de « Carp::Heavy » ont été fusionnées dans Carp à ce moment-là. [perl #121574]


Carp gère désormais mieux les plates-formes non ASCII.

Correction d'erreur d'un seul coup pour Perl < 5.14.

· constant a été mis à niveau vers la version 1.33.

Il accepte désormais les noms de constantes entièrement qualifiés, ce qui permet de définir des constantes dans
des packages autres que l'appelant.

· CPAN a été mis à niveau vers la version 2.11.

Ajoutez la prise en charge de « Cwd::getdcwd() » et introduisez une solution de contournement pour un comportement incorrect observé sur
Fraise Perl 5.20.1.

Correction de "chdir()" après le bug de création des dépendances.

Introduire un support expérimental pour les plugins/hooks.

Intégrer les sources « App::Cpan ».

Ne vérifiez pas la récursivité sur les dépendances facultatives.

Verification sanitaire META.yml contenir un hachage. [cpan #95271]


· CPAN::Meta::Requirements a été mis à niveau vers la version 2.132.

Contourne les limitations de « version::vpp » en détectant la magie v-string et ajoute la prise en charge
pour le prochain bootstrap ExtUtils::MakeMaker version.pm pour les Perls antérieurs à 5.10.0.

· Data::Dumper a été mis à niveau vers la version 2.158.

Corrige CVE-2014-4330 en ajoutant une variable/option de configuration pour limiter la récursivité lorsque
vidage de structures de données profondes.

Modifications pour résoudre les problèmes de Coverity. Les vidages XS enregistraient incorrectement le nom du code.
références stockées dans un GLOB. [perl #122070]


· DynaLoader a été mis à niveau vers la version 1.32.

Supprimez la variable globale « dl_nonlazy » si elle n'est pas utilisée dans Dynaloader. [perl #122926]

· Encode a été mis à niveau vers la version 2.72.

« piconv » a désormais une meilleure gestion des erreurs lorsque le nom d'encodage est inexistant, et un
la rupture de build lors de la mise à niveau d'Encode dans perl-5.8.2 et versions antérieures a été corrigée.

La construction en mode C++ sous Windows fonctionne désormais.

· Errno a été mis à niveau vers la version 1.23.

Ajoutez « -P » à la ligne de commande du préprocesseur sur GCC 5. GCC a ajouté des directives de ligne supplémentaires,
Interruption de l'analyse des définitions de codes d'erreur. [rt.perl.org #123784]

· experimental a été mis à niveau vers la version 0.013.

Fonctionnalités codées en dur pour les Perls antérieurs à 5.15.7.

· ExtUtils::CBuilder a été mis à niveau vers la version 0.280221.

Corrige une régression sur Android. [perl #122675]


· ExtUtils::Manifest a été mis à niveau vers la version 1.70.

Corrige un bug avec la gestion des noms de fichiers entre guillemets par « maniread() » et améliore « manifind() »
pour suivre les liens symboliques. [perl #122415]


· ExtUtils::ParseXS a été mis à niveau vers la version 3.28.

Déclarer « fichier » inutilisé uniquement s'il est réellement défini. Améliorer le code « RETVAL » généré.
génération pour éviter les références répétées à ST(0). [perl #123278] Élargir et documenter
l'optimisation de la table de types « /OBJ$/ » vers « /REF$/ » pour la méthode « DESTROY ». [perl
#123418]

· Fcntl a été mis à niveau vers la version 1.13.

Ajoutez la prise en charge des commandes « fcntl() » de taille de tampon de tuyau Linux.

· File::Find a été mis à niveau vers la version 1.29.

« find() » et « finddepth() » avertiront désormais s'ils sont transmis de manière inappropriée ou mal orthographiés
options.

· File::Glob a été mis à niveau vers la version 1.24.

Évitez de développer « SvIV() » pour appeler « get_sv() » trois fois à quelques endroits. [perl
#123606]

· HTTP::Tiny a été mis à niveau vers la version 0.054.

« keep_alive » est désormais compatible avec les forks et les threads.

· IO a été mis à niveau vers la version 1.35.

L'implémentation XS a été corrigée pour les anciens Perls.

· IO::Socket a été mis à niveau vers la version 1.38.

Documentez les limitations de la méthode « connected() ». [perl #123096]

· IO::Socket::IP a été mis à niveau vers la version 0.37.

Une meilleure solution pour la sous-classification de « connect() ». [cpan #95983]
[cpan #95983]


Implémente le délai d'expiration pour « connect() ». [cpan #92075]


· La collection de modules libnet a été mise à niveau vers la version 3.05.

Prise en charge d'IPv6 et SSL vers « Net::FTP », « Net::NNTP », « Net::POP3 » et « Net::SMTP ».
Améliorations dans l'authentification « Net::SMTP ».

· Locale::Codes a été mis à niveau vers la version 3.34.

Correction d'un bug dans les scripts utilisés pour extraire des données à partir de feuilles de calcul qui empêchait
Code de devise SHP à trouver. [cpan #94229]


De nouveaux codes ont été ajoutés.

· Math::BigInt a été mis à niveau vers la version 1.9997.

Synchroniser les modifications du POD depuis la version CPAN. « Math::BigFloat->blog(x) »
renvoie parfois « blog(2*x) » lorsque la précision est supérieure à 70 chiffres. Le résultat
de "Math::BigFloat->bdiv()" dans le contexte de la liste satisfait désormais "x = quotient * diviseur +
reste".

Gestion correcte des sous-classes. [cpan #96254]
[cpan #96254]


· Module::Metadata a été mis à niveau vers la version 1.000026.

Prise en charge des installations sur des perls plus anciens avec un ExtUtils::MakeMaker antérieur à 6.63_03

· overload a été mis à niveau vers la version 1.26.

Une vérification redondante « ref $sub » a été supprimée.

· La collection de modules PathTools a été mise à niveau vers la version 3.56.

Un avertissement de la gcc compilateur est désormais évité lors de la construction du XS.

Ne transformez pas le caractère « // » initial en « / » sous Cygwin. [perl #122635]

· perl5db.pl a été mis à niveau vers la version 1.49.

Le débogueur provoquerait un échec d'assertion. [perl #124127]


"fork()" dans le débogueur sous "tmux" créera désormais une nouvelle fenêtre pour le fork
processus. [perl #121333]

Le débogueur enregistre désormais le répertoire de travail actuel au démarrage et le restaure lorsque
Vous redémarrez votre programme avec « R » ou « rerun ». [perl #121509]


· PerlIO::scalar a été mis à niveau vers la version 0.22.

La lecture à partir d'une position bien au-delà de la fin du scalaire renvoie désormais correctement la fin de
fichier. [perl #123443]

La recherche d'une position négative échoue toujours, mais ne laisse plus la position du fichier définie
à un emplacement de négation.

"eof()" sur un handle "PerlIO::scalar" renvoie désormais correctement true lorsque la position du fichier
dépasse la barre des 2 Go sur les systèmes 32 bits.

Les tentatives d'écriture à des positions de fichier impossibles pour la plate-forme échouent désormais prématurément
plutôt que de s'enrouler à 4 Go.

· Pod::Perldoc a été mis à niveau vers la version 3.25.

Les handles de fichiers ouverts en lecture ou en écriture ont désormais « :encoding(UTF-8) » défini. [cpan
#98019]

· POSIX a été mis à niveau vers la version 1.53.

Les fonctions et constantes mathématiques C99 (par exemple « acosh », « isinf », « isnan », « round »,
"trunc"; "M_E", "M_SQRT2", "M_PI") ont été ajoutés.

« POSIX::tmpnam() » génère désormais un avertissement d'obsolescence. [perl #122005]

· Safe a été mis à niveau vers la version 2.39.

« reval » ne propageait pas correctement le contexte vide.

· Scalar-List-Utils a été mis à niveau vers la version 1.41.

Un nouveau module, Sub::Util, a été ajouté, contenant des fonctions liées aux références CODE,
y compris « subname » (inspiré de « Sub::Identity ») et « set_subname » (copié et
renommé depuis « Sub::Name »). L'utilisation de « GetMagic » dans « List::Util::reduce() » a également été
a été corrigé. [cpan #63211]

· SDBM_File a été mis à niveau vers la version 1.13.

Simplification du processus de construction. [perl #123413]

· Time::Piece a été mis à niveau vers la version 1.29.

Lors de l'impression d'un "Time::Seconds" négatif, le "moins" n'est plus perdu.

· Unicode::Collate a été mis à niveau vers la version 1.12.

Les contractions discontinues améliorées de la version 0.67 sont invalidées par défaut et sont
pris en charge comme paramètre « long_contraction ».

· Unicode::Normalize a été mis à niveau vers la version 1.18.

L'implémentation XSUB a été supprimée au profit de Perl pur.

· Unicode::UCD a été mis à niveau vers la version 0.61.

Une nouvelle fonction property_values() a été ajouté pour renvoyer la valeur possible d'une propriété donnée
valeurs.

Une nouvelle fonction charprop() a été ajouté pour renvoyer la valeur d'une propriété donnée pour un
point de code donné.

Une nouvelle fonction charprops_all() a été ajouté pour renvoyer les valeurs de tous les Unicode
propriétés pour un point de code donné.

Un bug a été corrigé afin que propaliases() renvoie les noms courts et longs corrects
pour les extensions Perl où c'était incorrect.

Un bug a été corrigé afin que prop_value_aliases() renvoie « undef » au lieu d'un mauvais
résultat pour les propriétés qui sont des extensions Perl.

Ce module fonctionne désormais sur les plateformes EBCDIC.

· utf8 a été mis à niveau vers la version 1.17

Une incompatibilité entre la documentation et le code dans « utf8::downgrade() » a été corrigée dans
en faveur de la documentation. Le second argument optionnel est désormais correctement traité comme un
perl booléen (sémantique vrai/faux) et non comme un entier.

· la version a été mise à niveau vers la version 0.9909.

De nombreux changements. Voir le Modifications fichier dans la distribution CPAN pour plus de détails.

· Win32 a été mis à niveau vers la version 0.51.

« GetOSName() » prend désormais en charge Windows 8.1 et la création en mode C++ fonctionne désormais.

· Win32API::File a été mis à niveau vers la version 0.1202

La construction en mode C++ fonctionne désormais.

· XSLoader a été mis à niveau vers la version 0.20.

Autoriser XSLoader à charger des modules à partir d'un espace de noms différent. [perl #122455]

Supprimé Modules et Pragmatique
Les modules suivants (et les modules associés) ont été supprimés du noyau perl
Distribution:

· CGI

· Module::Build

Documentation


New Documentation
perlunicook

Ce document, par Tom Christiansen, fournit des exemples de gestion d'Unicode en Perl.

Modifications à Existant Documentation
Perlaix

· Une note sur les longs doubles a été ajoutée.

perlapi

· Notez que "SvSetSV" ne fait pas de magie d'ensemble.

· "sv_usepvn_flags" - correction de la documentation pour mentionner l'utilisation de "Newx" au lieu de
"malloc".

[perle #121869]

· Clarifier où "NUL" peut être incorporé ou est requis pour terminer une chaîne.

· Certains documents qui manquaient auparavant en raison d'erreurs de formatage sont désormais
inclus.

· Les entrées sont désormais organisées en groupes plutôt qu'en fonction du fichier dans lequel elles se trouvent.

· Le tri alphabétique des entrées est désormais effectué de manière cohérente (automatiquement par le POD)
générateur) pour faciliter la recherche des entrées lors de la numérisation.

données perl

· La syntaxe des noms de variables à caractère unique a été mise à jour et plus
entièrement expliqué.

· Les nombres à virgule flottante hexadécimaux sont décrits, tout comme l'infini et NaN.

perlebcdic

· Ce document a été considérablement mis à jour à la lumière des récentes améliorations apportées
Prise en charge EBCDIC.

perfiltre

· Ajout d'une section LIMITATIONS.

perfunc

· Mentionnez que « study() » est actuellement une opération interdite.

· L'appel de « delete » ou « exists » sur les valeurs d'un tableau est désormais décrit comme « fortement
« découragé » plutôt que « déconseillé ».

· Améliorer la documentation de « notre ».

· "-l" indique maintenant qu'il renverra false si les liens symboliques ne sont pas pris en charge par le fichier
système. [perle #121523]

· Notez que « exec LIST » et « system LIST » peuvent revenir au shell sous Win32. Seuls les
La syntaxe d'objet indirect « exec PROGRAM LIST » et « system PROGRAM LIST » sera fiable
évitez d'utiliser le shell.

Cela a également été noté dans perlport.

[perle #122046]

perlguts

· L'exemple OOK a été mis à jour pour tenir compte des changements COW et d'un changement dans le
stockage du décalage.

· Détails sur les symboles de niveau C et libperl.t ajoutés.

· Des informations sur la gestion Unicode ont été ajoutées

· Des informations sur la gestion de l'EBCDIC ont été ajoutées

perlhack

· Une note a été ajoutée concernant l'exécution sur des plates-formes avec des jeux de caractères non ASCII

· Une note a été ajoutée concernant les tests de performance

astuces perlhack

· Une documentation a été ajoutée illustrant les dangers de supposer qu'il n'y a pas
modifier le contenu de la mémoire statique pointée par les valeurs de retour de Perl
wrappers pour les fonctions de la bibliothèque C.

· Les remplacements pour « tmpfile », « atoi », « strtol » et « strtoul » sont désormais recommandés.

· Documentation mise à jour pour la cible « test.valgrind » « make ». [perl #121431]


· Des informations sont fournies sur l'écriture de fichiers de test de manière portable sur des plates-formes non ASCII.

· Une note a été ajoutée sur la façon d'obtenir une trace de pile en langage C.

perlhpux

· Notez que le message « Redéclaration de « sendpath » avec une classe de stockage différente
« spécificateur » est inoffensif.

perllocale

· Mis à jour pour les améliorations de la v5.22, ainsi que quelques clarifications.

style perlmod

· Au lieu de pointer vers la liste des modules, nous pointons désormais vers PrePAN
<http://prepan.org/>.

perlop

· Mis à jour pour les améliorations de la v5.22, ainsi que quelques clarifications.

perlpodspec

· La spécification du langage des pods est en train de changer afin que l'encodage par défaut des pods
qui ne sont pas en UTF-8 (sauf indication contraire) sont CP1252 au lieu d'ISO 8859-1
(Latin1).

politique de perl

· Nous avons maintenant un code de conduite pour le p5p liste de diffusion, comme documenté dans « NORMES DE
CONDUIRE" dans perlpolicy.

· Les conditions pour marquer une fonctionnalité expérimentale comme non expérimentale sont désormais définies
en dehors.

· Des éclaircissements ont été apportés quant aux types de modifications autorisées dans la maintenance
Communiqués.

Perlport

· Les informations obsolètes spécifiques au VMS ont été corrigées et/ou simplifiées.

· Des notes sur EBCDIC ont été ajoutées.

perler

· La description du modificateur « /x » a été clarifiée pour indiquer que les commentaires ne peuvent pas
être continué sur la ligne suivante en les échappant ; et il y a maintenant une liste de tous les
caractères qui sont considérés comme des espaces par ce modificateur.

· Le nouveau modificateur « /n » est décrit.

· Une note a été ajoutée sur la façon de rendre les plages de classes de caractères entre crochets portables vers des non-
Machines ASCII.

perlrebackslash

· Ajout de la documentation de « \b{sb} », « \b{wb} », « \b{gcb} » et « \b{g} ».

perlrecharclasse

· Des clarifications ont été ajoutées à « Plages de caractères » dans perlrecharclass à cet effet
« [AZ] », « [az] », « [0-9] » et toutes leurs sous-plages dans l'expression régulière entre crochets
les classes de caractères sont garanties de correspondre exactement à ce qu'un anglophone naïf ferait
attendez-vous à ce qu'ils correspondent, même sur des plateformes (telles que EBCDIC) où Perl doit faire des opérations supplémentaires
travailler pour y parvenir.

· La documentation des classes de caractères entre crochets a été étendue pour couvrir les
améliorations dans « qr/[\N{séquence nommée}]/ » (voir sous « Corrections de bugs sélectionnées »).

réf_perl

· Une nouvelle section a été ajoutée Affectation aux références

perlsec

· Commentaires ajoutés sur la complexité algorithmique et les hachages liés.

perlsyne

· Une ambiguïté dans la documentation de l'instruction « ... » a été corrigée. [perl
#122661]

· La condition vide dans « for » et « while » est désormais documentée dans perlsyn.

perlunicode

· Ce document a fait l'objet de révisions approfondies pour le mettre à jour avec la prise en charge Unicode actuelle
et pour le rendre plus lisible. Il est à noter qu'Unicode 7.0 a modifié son fonctionnement.
avec des non-caractères. Perl conserve l'ancienne méthode de gestion pour des raisons de rétrogradation.
compatibilité. Voir « Points de code non caractère » dans perlunicode.

perluniintro

· Conseils pour vous assurer que vos chaînes et vos modèles d'expressions régulières sont
interprété comme Unicode a été mis à jour.

perlvar

· $] n'est plus répertorié comme obsolète. Une discussion a été ajoutée sur le
avantages et inconvénients de son utilisation par rapport à $^V. $OLD_PERL_VERSION a été réajouté
à la documentation sous la forme longue de $].

· « ${^ENCODING} » est désormais marqué comme obsolète.

· L'entrée pour « %^H » a été clarifiée pour indiquer qu'elle ne peut gérer que des valeurs simples.

perlvms

· Le matériel obsolète et/ou incorrect a été supprimé.

· Documentation mise à jour sur l'interaction entre l'environnement et le shell dans VMS.

perlxs

· Ajout d'une discussion sur les problèmes de localisation dans le code XS.

Diagnostics


Les ajouts ou modifications suivants ont été apportés à la sortie de diagnostic, y compris les avertissements
et des messages d'erreur fatals. Pour la liste complète des messages de diagnostic, voir perldiag.

New Diagnostics
New Erreurs

· Mauvais symbole pour le scalaire

(P) Une demande interne a demandé d'ajouter une entrée scalaire à quelque chose qui n'était pas un symbole
entrée du tableau.

· Impossible d'utiliser un hachage comme référence

(F) Vous avez essayé d'utiliser un hachage comme référence, comme dans "%foo->{"bar"}" ou
"%$ref->{"bonjour"}". Les versions de perl <= 5.6.1 permettaient cette syntaxe, mais
n'aurais pas dû.

· Impossible d'utiliser un tableau comme référence

(F) Vous avez essayé d'utiliser un tableau comme référence, comme dans "@foo->[23]" ou "@$ref->[99]".
Les versions de Perl <= 5.6.1 autorisaient auparavant cette syntaxe, mais n'auraient pas dû l'être.

· Impossible d'utiliser 'defined(@array)' (vous devriez peut-être simplement omettre le défini()?)

(F) "defined()" n'est pas utile sur les tableaux car il vérifie une valeur indéfinie scalaire
valeur. Pour voir si le tableau est vide, utilisez
"si (@array) { # non vide }" par exemple.

· Impossible d'utiliser 'defined(%hash)' (vous devriez peut-être simplement omettre le défini()?)

(F) "defined()" n'est généralement pas correct sur les hachages.

Bien que "defined %hash" soit faux sur un simple hachage non encore utilisé, il devient vrai dans
plusieurs circonstances non évidentes, y compris des itérateurs, des références faibles, des noms de cachette,
même rester vrai après "undef %hash". Ces choses rendent "% hash défini" assez
inutile en pratique, il génère donc maintenant une erreur fatale.

Si une vérification pour non vide est ce que vous vouliez, mettez-la simplement dans un contexte booléen (voir
"Valeurs scalaires" dans perldata):

si (% hachage) {
# pas vide
}

Si vous aviez "défini %Foo::Bar::QUUX" pour vérifier si une telle variable de package existe
alors cela n'a jamais été vraiment fiable, et ce n'est pas un bon moyen de se renseigner sur le
caractéristiques d'un paquet, ou s'il est chargé, etc.

· Impossible de chr %f

(F) Vous avez passé un nombre invalide (comme un infini ou pas un nombre) à "chr".

· Impossible de compresser %f dans le pack

(F) Vous avez essayé de convertir un nombre infini ou non-un nombre en un caractère non signé, ce qui
ça n'a aucun sens.

· Impossible de compresser %f avec '%c'

(F) Vous avez essayé de convertir un nombre infini ou non-un nombre en un caractère, ce qui ne fait aucun
sens.

· Impossible d'imprimer %f avec '%c'

(F) Vous avez essayé d'imprimer un infini ou pas un nombre en tant que caractère (%c), ce qui ne rend pas
sens. Peut-être vouliez-vous dire « %s », ou simplement le chaîner ?

· les définitions d'alias de noms de caractères ne peuvent pas contenir une séquence de plusieurs espaces

(F) Vous avez défini un nom de personnage qui comportait plusieurs espaces à la suite. Changer
eux à des espaces simples. Généralement ces noms sont définis dans l'import ":alias"
argument pour "utiliser des noms de caractères", mais ils pourraient être définis par un traducteur installé dans
$^H{noms}. Voir « ALIAS PERSONNALISÉS » dans les noms de caractères.

· les définitions d'alias de noms de caractères ne doivent pas contenir d'espaces de fin

(F) Vous avez défini un nom de personnage qui se termine par un espace. Retirer le
espace(s) de fuite. Habituellement, ces noms sont définis dans l'argument d'importation ":alias" pour
"utiliser des noms de caractères", mais ils pourraient être définis par un traducteur installé dans
$^H{noms}. Voir « ALIAS PERSONNALISÉS » dans les noms de caractères.

· :const n'est pas autorisé sur les sous-routines nommées

(F) L'attribut "const" provoque l'exécution d'un sous-programme anonyme et sa valeur
capturé au moment de son clonage. Les sous-programmes nommés ne sont pas clonés comme ceci,
donc l'attribut n'a pas de sens sur eux.

· Flottant hexadécimal : erreur interne

(F) Quelque chose s'est horriblement mal passé dans la gestion des flotteurs hexadécimaux.

· Flottant hexadécimal : format double long non pris en charge

(F) Vous avez configuré Perl pour utiliser les longs doubles mais les internes du long double
le format est inconnu, par conséquent la sortie en hexadécimal flottant est impossible.

· Suicide illégal

(F) Le script exécuté sous suidperl était en quelque sorte illégal.

· Dans '(?...)', les '(' et '?' doivent être adjacents dans l'expression régulière ; marqués par <-- ICI dans m/%s/

(F) La séquence de deux caractères "(?" dans ce contexte dans un modèle d'expression régulière
devrait être un jeton indivisible, sans rien intervenant entre le "(" et le "?",
mais tu les as séparés.

· Dans '(*VERBE...)', les '(' et '*' doivent être adjacents dans l'expression régulière ; marqués par <-- ICI dans
Mme/

(F) La séquence de deux caractères "(*" dans ce contexte dans un modèle d'expression régulière
devrait être un jeton indivisible, sans aucun intervalle entre le "(" et le "*",
mais tu les as séparés.

· Quantificateur non valide dans {,} dans l'expression régulière ; marqué par <-- ICI dans m/%s/

(F) Le motif ressemble à un quantificateur {min,max}, mais le min ou le max ne peut pas être
analysé comme un nombre valide : soit il comporte des zéros non significatifs, soit il représente un nombre trop grand
nombre à gérer. Le <-- ICI montre où dans l'expression régulière le problème
a été découvert. Voir perler.

· '%s' est un type lié inconnu dans regex

(F) Vous avez utilisé "\b{...}" ou "\B{...}" et le "..." n'est pas connu de Perl. Le courant
les valeurs valides sont données dans "\b{}, \b, \B{}, \B" dans perlrebackslash.

· Argument manquant ou non défini à exiger

(F) Vous avez essayé d'appeler « require » sans argument ou avec une valeur indéfinie comme
argument. « require » attend soit un nom de package, soit une spécification de fichier comme
argument. Voir "exiger" dans perlfunc.

Auparavant, « require » sans argument ou « undef » avertissait d'un nom de fichier Null.

New Avertissements

· \C est obsolète dans regex

(D obsolète) La classe de caractères "/\C/" est obsolète dans la version 5.20 et émet désormais un
Avertissement. Il est prévu que cela devienne une erreur dans la version 5.24. Cette classe de caractères
correspond à un seul octet même s'il apparaît dans un caractère multi-octets, s'interrompt
encapsulation et peut corrompre les chaînes UTF-8.

· « %s » est plus clairement écrit simplement comme « %s » dans regex ; marqué par <-- ICI dans m/%s/

(W regexp) (uniquement sous "use re 'strict'" ou dans "(?[...])")

Vous avez spécifié un caractère qui a la manière la plus simple de l'écrire, et qui est
également portable sur des plates-formes fonctionnant avec différents jeux de caractères.

· L'argument « %s » est traité comme 0 par incrément (++)

(W numérique) La chaîne indiquée a été fournie comme argument à l'opérateur "++" qui
attend un nombre ou une chaîne correspondant à "/^[a-zA-Z]*[0-9]*\z/". Voir "Auto-
incrémenter et Auto-décrémenter" dans perlop pour plus de détails.

· Les deux extrémités de la plage ou aucune ne doit être Unicode dans l'expression régulière ; marquée par <-- ICI dans m/%s/

(W regexp) (uniquement sous "use re 'strict'" ou dans "(?[...])")

Dans une classe de caractères entre crochets dans un modèle d'expression régulière, vous aviez une plage qui
a exactement une extrémité spécifiée en utilisant "\N{}", et l'autre extrémité est spécifiée en utilisant
un mécanisme non portable. Perl traite la plage comme une plage Unicode, c'est-à-dire
les caractères qu'il contient sont considérés comme des caractères Unicode, et qui peuvent être
différents points de code sur certaines plates-formes sur lesquelles Perl s'exécute. Par exemple, "[\N{U+06}-\x08]"
est traité comme si vous aviez dit "[\N{U+06}-\N{U+08}]", c'est-à-dire qu'il correspond au
caractères dont les points de code en Unicode sont 6, 7 et 8. Mais ce "\x08" peut
indiquer que vous vouliez dire quelque chose de différent, donc l'avertissement est déclenché.

· Impossible d'exécuter %s("%s") sur des paramètres régionaux non UTF-8 ; résolu en « %s ».

(W locale) Vous êtes 1) sous ""use locale"" ; 2) la locale actuelle n'est pas une
UTF-8 un ; 3) vous avez essayé d'effectuer l'opération de changement de casse désignée sur le
caractère Unicode ; et 4) le résultat de cette opération mélangerait Unicode et locale
règles qui sont probablement en conflit.

La catégorie d'avertissements « locale » est nouvelle.

· :const est expérimental

(S experimental::const_attr) L'attribut "const" est expérimental. Si tu veux
utilisez la fonctionnalité, désactivez l'avertissement avec "no warnings 'experimental::const_attr'",
mais sachez qu'en faisant cela vous prenez le risque que votre code puisse casser dans le futur
Version Perl.

· gmtime(%f) a échoué

(W overflow) Vous avez appelé "gmtime" avec un nombre qu'il ne pouvait pas gérer : trop grand,
trop petit, ou NaN. La valeur renvoyée est "undef".

· Flottant hexadécimal : dépassement d'exposant

(W overflow) Le nombre à virgule flottante hexadécimal a un exposant plus grand que le nombre flottant
appuis ponctuels.

· Flottant hexadécimal : dépassement de capacité de l'exposant

(W overflow) Le nombre à virgule flottante hexadécimal a un exposant plus petit que le nombre flottant
appuis ponctuels.

· Flottant hexadécimal : dépassement de mantisse

(W overflow) Le littéral hexadécimal à virgule flottante avait plus de bits dans la mantisse (le
partie entre le « 0x » et l'exposant, également appelée fraction ou mantisse)
que la virgule flottante prend en charge.

· Flottant hexadécimal : perte de précision

(débordement de W) La virgule flottante hexadécimale avait en interne plus de chiffres qu'il n'en aurait été possible
sortir. Cela peut être dû à des formats doubles longs non pris en charge ou à des entiers 64 bits
n'étant pas disponible (nécessaire pour récupérer les chiffres dans certaines configurations).

· Les paramètres régionaux « %s » peuvent ne pas fonctionner correctement.%s

(locale W) Vous utilisez la locale nommée, qui n'est pas UTF-8, et qui perl
a déterminé n'est pas entièrement compatible avec ce qu'il peut gérer. Le deuxième %s donne un
raison.

La catégorie d'avertissements « locale » est nouvelle.

· localtime(%f) a échoué

(W overflow) Vous avez appelé "localtime" avec un nombre qu'il ne pouvait pas gérer : trop grand,
trop petit, ou NaN. La valeur renvoyée est "undef".

· Un nombre de répétitions négatif ne fait rien

(W numérique) Vous avez essayé d'exécuter l'opérateur de répétition "x" moins de 0 fois, ce qui
n'a pas de sens.

· L'espace insécable dans une définition d'alias de noms de caractères est obsolète

(D obsolète) Vous avez défini un nom de personnage contenant un espace sans interruption
personnage. Remplacez-le par un espace régulier. Habituellement, ces noms sont définis dans le
":alias" import argument à "use charnames", mais ils pourraient être définis par un traducteur
installé dans $^H{charnames}. Voir « ALIAS PERSONNALISÉS » dans les noms de caractères.

· Le nombre de répétitions non finies ne fait rien

(W numérique) Vous avez essayé d'exécuter l'opérateur de répétition « x » « Inf » (ou « -Inf ») ou NaN
fois, ce qui n'a pas de sens.

· La couche PerlIO ':win32' est expérimentale

(S experimental::win32_perlio) La couche PerlIO ":win32" est expérimentale. Si tu veux
pour prendre le risque d'utiliser cette couche, désactivez simplement cet avertissement :

aucun avertissement "expérimental::win32_perlio" ;

· Les plages d'imprimables ASCII doivent être un sous-ensemble de « 0-9 », « AZ » ou « az » dans l'expression régulière ;
marqué par <-- ICI en m/%s/

(W regexp) (uniquement sous "use re 'strict'" ou dans "(?[...])")

Des règles plus strictes aident à détecter les fautes de frappe et autres erreurs. Peut-être n'aviez-vous même pas l'intention de
plage ici, si le "-" était censé être un autre caractère, ou aurait dû être
échappé (comme "\-"). Si vous aviez prévu une cuisinière, celle qui a été utilisée n'est pas portable
entre les plates-formes ASCII et EBCDIC, et n'a pas de signification évidente pour un
lecteur.

[3-7] # D'accord ; Évident et portable
[dg] # OK ; Évident et portable
[AY] # D'accord ; Évident et portable
[Az] # FAUX ; Non portable ; pas clair ce que l'on veut dire
[aZ] # FAUX ; Non portable ; pas clair ce que l'on veut dire
[%-.] # TORT; Non portable ; pas clair ce que l'on veut dire
[\x41-Z] # FAUX ; Non portable ; pas évident pour un non-geek

(Vous pouvez forcer la portabilité en spécifiant une plage Unicode, ce qui signifie que le
les points de terminaison sont spécifiés par "\N{...}", mais la signification peut toujours ne pas être évidente.) Le
des règles plus strictes exigent que les plages qui commencent ou s'arrêtent avec un caractère ASCII qui est
pas un contrôle dont tous les points de terminaison sont un caractère littéral, et non un échappement
séquence (comme "\x41"), et les plages doivent être composées uniquement de chiffres ou de lettres majuscules,
ou toutes les lettres minuscules.

· Les plages de chiffres doivent appartenir au même groupe dans l'expression régulière ; marquées par <-- ICI dans m/%s/

(W regexp) (uniquement sous "use re 'strict'" ou dans "(?[...])")

Des règles plus strictes aident à détecter les fautes de frappe et autres erreurs. Vous avez inclus une gamme, et à
au moins une des extrémités est un chiffre décimal. En vertu des règles plus strictes, lorsque cette
arrive, les deux extrémités doivent être des chiffres dans le même groupe de 10 chiffres consécutifs.

· Argument redondant dans %s

(W redondant) Vous avez appelé une fonction avec plus d'arguments que nécessaire, comme indiqué
par des informations contenues dans d'autres arguments que vous avez fournis (par exemple. un format printf). Actuellement
émis uniquement lorsqu'un format de type printf nécessitait moins d'arguments que ceux fournis,
mais pourrait être utilisé à l'avenir pour par exemple "pack" en perlfunc.

La catégorie d'avertissements « redondant » est nouvelle. Voir aussi [perl #121025]
.

· La liste de remplacement est plus longue que la liste de recherche

Ce n'est pas un nouveau diagnostic, mais dans les versions précédentes, il n'était pas affiché par accident
si la translittération contenait des caractères larges. Ce problème est désormais résolu, vous pouvez donc
voyez ce diagnostic dans des endroits où vous ne l'aviez pas vu auparavant (mais où vous auriez dû le faire).

· L'utilisation de \b{} pour les paramètres régionaux non UTF-8 est incorrecte. En supposant un paramètre régional UTF-8

(W locale) Vous faites correspondre une expression régulière à l'aide de règles de locale et un Unicode
la limite est mise en correspondance, mais les paramètres régionaux ne sont pas Unicode. Cela ne fait pas
sens. Perl continuera, en supposant une locale Unicode (UTF-8), mais les résultats pourraient
bien être faux, sauf si la locale est ISO-8859-1 (Latin1) où cela
le message est faux et peut être ignoré.

La catégorie d'avertissements « locale » est nouvelle.

· Utilisation de /u pour '%s' au lieu de /%s dans les expressions régulières ; marqué par <-- ICI dans m/%s/

(W regexp) Vous avez utilisé une limite Unicode ("\b{...}" ou "\B{...}") dans une partie d'un
expression régulière où les modificateurs de jeu de caractères "/a" ou "/aa" sont en vigueur.
Ces deux modificateurs indiquent une interprétation ASCII, et cela n'a pas de sens pour
une définition Unicode. L'expression régulière générée sera compilée de manière à ce que
La limite utilise tout Unicode. Aucune autre partie de l'expression régulière n'est affectée.

· La fonctionnalité bit à bit est expérimentale

(S experimental::bitwise) Cet avertissement est émis si vous utilisez des opérateurs au niveau du bit ("& | ^
~ &. |. ^. ~.") avec la fonction "au niveau du bit" activée. Supprimez simplement l'avertissement si
vous souhaitez utiliser la fonctionnalité, mais sachez qu'en le faisant vous prenez le risque de
en utilisant une fonctionnalité expérimentale qui peut changer ou être supprimée dans une future version de Perl :

aucun avertissement "expérimental::bitwise" ;
utiliser la fonctionnalité "au niveau du bit" ;
$x |.= $y;

· L'accolade gauche non échappée dans l'expression régulière est obsolète, transmise dans l'expression régulière ; marquée par <--
ICI en m/%s/

(D obsolète, regexp) Vous avez utilisé un caractère littéral "{" dans une expression régulière
schéma. Vous devriez changer pour utiliser "\{" à la place, car une future version de Perl
(provisoirement v5.26) considérera cela comme une erreur de syntaxe. Si le motif
les délimiteurs sont également des accolades, toute accolade droite correspondante ("}") doit également être échappée à
éviter de confondre l'analyseur, par exemple,

qr{abc\{def\}ghi}

· L'utilisation de caractères littéraux non graphiques dans les noms de variables est déconseillée

(D obsolète) Utilisation de caractères littéraux non graphiques (y compris de contrôle) dans la source
pour faire référence à ^FOO Les variables, comme $^X et "${^GLOBAL_PHASE}" sont désormais obsolètes.

· Utilisation inutile de l'attribut « const »

(W misc) L'attribut "const" n'a d'effet que sur les prototypes de fermeture anonymes.
Vous l'avez appliqué à un sous-programme via attributs.pm. Ceci n'est utile qu'à l'intérieur d'un
gestionnaire d'attributs pour un sous-programme anonyme.

· Utilisation inutile du modificateur /d dans l'opérateur de translittération

Ce n'est pas un nouveau diagnostic, mais dans les versions précédentes, il n'était pas affiché par accident
si la translittération contenait des caractères larges. Ce problème est désormais résolu, vous pouvez donc
voyez ce diagnostic dans des endroits où vous ne l'aviez pas vu auparavant (mais où vous auriez dû le faire).

· « use re 'strict' » est expérimental

(S experimental::re_strict) Les choses qui sont différentes quand une expression régulière
pattern est compilé sous 'strict' sont sujets à changement dans les futures versions de Perl dans
des méthodes incompatibles ; il existe également des propositions visant à modifier la manière d'activer la vérification stricte
au lieu d'utiliser ce sous-pragma. Cela signifie qu'un modèle compilé aujourd'hui peut
pas dans une future version de Perl. Cet avertissement vise à vous alerter de ce risque.

· Avertissement : impossible de fermer correctement le handle de fichier : %s

Avertissement : impossible de fermer correctement le descripteur %s : %s

(S io) Auparavant, Perl ignorait silencieusement toutes les erreurs lors de la fermeture implicite d'un
descripteur de fichier, à où le nombre de références du descripteur de fichier a atteint zéro et le
le code de l'utilisateur n'avait pas déjà appelé "close()" ; par exemple

{
ouvre mon $fh, '>', $file ou meurs "open: '$file': $!\n";
imprimez $fh, $data ou mourrez ;
} # fermeture implicite ici

Dans une situation telle que le disque plein, en raison de la mise en mémoire tampon, l'erreur ne peut être détectée que
lors de la clôture finale, donc ne pas vérifier le résultat de la clôture est dangereux.

Perl avertit désormais dans de telles situations.

· Caractère large (U+%X) dans %s

(locale W) Dans une locale à un octet (à, un non-UTF-8), un multi-octet
personnage a été rencontré. Perl considère ce caractère comme l'Unicode spécifié
point de code. La combinaison de locales non UTF-8 et d'Unicode est dangereuse. Presque certainement
certains personnages auront deux représentations différentes. Par exemple, dans l'ISO
8859-7 (grec), le point de code 0xC3 représente un Gamma majuscule. Mais alors aussi
fait 0x393. Cela rendra les comparaisons de chaînes peu fiables.

Vous devez probablement comprendre comment ce caractère multi-octets s'est mélangé avec votre
locale à un octet (ou peut-être que vous pensiez avoir une locale UTF-8, mais Perl
n'est pas d'accord).

La catégorie d'avertissements « locale » est nouvelle.

Modifications à Existant Diagnostics
· <> doit être entre guillemets

Cet avertissement a été modifié en <> à require-statement doit être entre guillemets pour rendre le
problème plus identifiable.

· L'argument « %s » n'est pas numérique %s

L'entrée perldiag pour cet avertissement a ajouté cette note de clarification :

Notez que pour Inf et NaN (infini et non-un-nombre), le
la définition de « numérique » est quelque peu inhabituelle : les chaînes elles-mêmes
(comme « Inf ») sont considérés comme numériques, et tout ce qui les suit est
considéré comme non numérique.

· Le symbole global « %s » nécessite un nom de package explicite

Ce message a été ajouté à la fin de « (avez-vous oublié de déclarer « mon %s » ?) » pour le rendre
plus utile aux nouveaux programmeurs Perl. [perl #121638]


· « « ma » variable &foo::bar ne peut pas être dans un package » a été reformulé pour dire « sous-routine »
au lieu de « variable ».

· \N{} dans la classe de caractères restreinte à un caractère dans l'expression régulière ; marqué par <-- ICI dans
Mme/

Ce message a eu caractère classe changé en inversé caractère classe or as a gamme
point final is pour refléter les améliorations dans « qr/[\N{séquence nommée}]/ » (voir sous
« Corrections de bugs sélectionnées »).

· panique : frexp

Ce message a été ajouté à « : %f » pour montrer quel est le nombre à virgule flottante incriminé.
le numéro est.

· Possible priorité problème on bit à bit %c opérateur reformulé comme Priorité possible
problème sur l'opérateur bit à bit %s.

· Échec de %s sur le nom de fichier contenant une nouvelle ligne

Cet avertissement n'est désormais généré que lorsque la nouvelle ligne se trouve à la fin du nom de fichier.

· « La variable %s ne restera pas partagée » a été modifiée pour indiquer « Sous-routine » lorsqu'elle est
en fait un sous-ensemble lexical qui ne restera pas partagé.

· Lookbehind de longueur variable non implémenté dans regex m/%s/

L'entrée perldiag pour cet avertissement a reçu des informations sur le comportement Unicode.

Diagnostique Déménagements
· « L'utilisation ambiguë de -foo est résolue en -&truc()"

Il n’y a en fait aucune ambiguïté ici, et cela empêche l’utilisation de constantes niées ;
par exemple, "-Inf".

· « Constant n'est pas une référence FOO »

Vérification au moment de la compilation du déréférencement constant (par exemple, "my_constant->()") a été
supprimé, car il ne prenait pas en compte la surcharge. [perl #69456]
[perl #69456]


Services Publics Modifications


trouver2perl, p2p et a2p enlèvement
· Le x2p/ le répertoire a été supprimé du noyau Perl.

Cela supprime find2perl, s2p et a2p. Ils ont été publiés séparément sur CPAN.
distributions ("App::find2perl", "App::s2p", "App::a2p").

h2ph
· h2ph gère désormais les constantes hexadécimales dans les définitions de macros prédéfinies du compilateur,
comme visible dans $Config{cppsymbols}. [perl #123784]
.

s'enfoncer
· Ne dépend plus de modules non essentiels.

Configuration et Compilation


· Configurez vérifie désormais "lrintl()", "lroundl()", "llrintl()" et "llroundl()".

· Configurez avec « -Dmksymlinks » devrait désormais être plus rapide. [perl #122002]
.

Les bibliothèques « pthreads » et « cl » seront liées par défaut si elles sont présentes. Cela permet
Modules XS nécessitant des threads pour fonctionner sur des Perls non threadés. Notez que vous devez
passez toujours "-Dusethreads" si vous voulez un perl threadé.

· Pour obtenir plus de précision et de portée pour les nombres à virgule flottante, on peut désormais utiliser le GCC
bibliothèque quadmath qui implémente les nombres à virgule flottante à quadruple précision sur
Plateformes x86 et IA-64. Voir INSTALLER pour en savoir plus.

· MurmurHash64A et MurmurHash64B peuvent désormais être configurés comme fonction de hachage interne.

· « make test.valgrind » prend désormais en charge les tests parallèles.

Par exemple :

TEST_JOBS=9 faire test.valgrind

Voir « valgrind » dans perlhacktips pour plus d'informations.

[perle #121431]

· L'option de construction MAD (Misc Attribute Decoration) a été supprimée

Il s'agissait d'une tentative non maintenue visant à préserver plus fidèlement l'arbre d'analyse Perl.
que la conversion automatique de Perl 5 en Perl 6 aurait été plus facile.

Cette option de configuration au moment de la construction n'avait pas été maintenue pendant des années et avait probablement
ont sérieusement divergé du côté de Perl 5 et Perl 6.

· Un nouvel indicateur de compilation, « -DPERL_OP_PARENT », est disponible. Pour plus de détails, consultez le
discussion ci-dessous dans « Modifications internes ».

Pathtools ne tente plus de charger XS sur miniperl. Cela accélère la compilation de Perl.
légèrement.

USP,EP, BP


· t/porting/re_context.t a été ajouté pour tester que utf8 et ses dépendances utilisent uniquement
le sous-ensemble des variables de capture « $1..$n » pour lesquelles « Perl_save_re_context() » est codé en dur
localiser, car cette fonction n'a aucun moyen efficace de déterminer au moment de l'exécution ce qui
vars à localiser.

· Des tests pour les problèmes de performances ont été ajoutés dans le fichier t/perf/taint.t.

· Certains tests d'expressions régulières sont écrits de telle manière qu'ils s'exécuteront très lentement
Si certaines optimisations échouent. Ces tests ont été déplacés vers de nouveaux fichiers.
t/re/vitesse.t et t/re/speed_thr.t, et sont exécutés avec un « watchdog() ».

· "test.pl" autorise désormais "plan skip_all => $reason", pour le rendre plus compatible avec
"Test::Plus".

· Un nouveau script de test, op/infnan.t, a été ajouté pour tester si l'infini et NaN fonctionnent
correctement. Voir « Amélioration de la gestion de l'infini et des nombres NaN (pas un nombre) ».

Plateforme Assistance


retrouvé Plateformes
Les plateformes IRIX et Tru64 fonctionnent à nouveau.
Quelques échecs de « make test » persistent : [perl #123977]
et [perl #123977]
pour IRIX ; [perl #125298]
, [cpan #124212]
, et [cpan #99605]
pour Tru104836.

Page de codes EBCDIC 1047 pour z/OS
Le noyau Perl fonctionne désormais sur cette plateforme EBCDIC. Les versions précédentes de Perl fonctionnaient également, mais même
bien que le support n'ait pas été officiellement retiré, les perls récents ne se compilaient pas et ne s'exécutaient pas
Perl 5.20 fonctionnerait, mais il comportait de nombreux bugs qui ont été corrigés. De nombreux CPAN
Les modules fournis avec Perl échouent toujours aux tests, y compris « Pod::Simple ». Cependant,
La version de « Pod::Simple » actuellement sur CPAN devrait fonctionner ; elle a été corrigée trop tard pour
inclus dans Perl 5.22. Des travaux sont en cours pour corriger de nombreux modules CPAN encore défectueux.
qui sera probablement installé sur CPAN une fois terminé, afin que vous n'ayez peut-être pas à le faire
attendez Perl 5.24 pour obtenir une version fonctionnelle.

Discontinus Plateformes
NEXTSTEP/OPENSTEP
NeXTSTEP était un système d'exploitation propriétaire fourni avec les stations de travail de NeXT dans le
début au milieu des années 90 ; OPENSTEP était une spécification d'API qui fournissait un NeXTSTEP de type
sur un système non NeXTSTEP. Ces deux systèmes étant obsolètes depuis longtemps, la prise en charge de la construction
Perl a été supprimé sur eux.

Spécifique à la plateforme Remarques
EBCDIC
Une gestion spéciale est requise de l'interpréteur Perl sur les plates-formes EBCDIC pour obtenir
"qr/[ij]/" pour correspondre uniquement à "i" et "j", car il y a 7 caractères entre le code
points pour « i » et « j ». Cette gestion spéciale n'était invoquée que lorsque les deux extrémités de
La plage est composée de littéraux. Elle est désormais également invoquée si l'une des formes « \N{...} » est
la spécification d'un caractère par son nom ou son point de code Unicode est utilisée à la place d'un littéral.
Voir « Plages de caractères » dans perlrecharclass.

HP-UX
L'archname distingue désormais use64bitint de use64bitall.

Android
La prise en charge de la compilation a été améliorée pour la compilation croisée en général et pour Android dans
notamment.

VMS
· Lors du lancement d'un sous-processus sans attente, la valeur de retour est désormais correcte
PID

· Corriger un prototype afin que la liaison n'échoue pas sous le compilateur VMS C++.

· Les détections « finite », « finitel » et « isfinite » ont été ajoutées à « configure.com »,
la gestion de l'environnement a subi quelques modifications mineures et un correctif pour une fonctionnalité héritée
vérification du statut.

Win32
· miniperl.exe est désormais construit avec « -fno-strict-aliasing », permettant aux versions 64 bits de
terminé sur GCC 4.8. [perl #123976]


· « nmake minitest » fonctionne désormais sous Win32. En raison de problèmes de dépendances, vous devez compiler.
« nmake test-prep » en premier, et un petit nombre de tests échouent. [perl #123394]


· Perl peut désormais être compilé en mode C++ sous Windows en définissant la macro makefile
"USE_CPLUSPLUS" à la valeur "define".

· La forme de liste des ouvertures par pipeline a été implémentée pour Win32. Remarque : contrairement à « system »,
LIST" ceci ne revient pas au shell. [perl #121159]


· Nouvelles options de configuration « DebugSymbols » et « DebugFull » ajoutées à Windows
makefiles.

· Auparavant, compilation de modules XS (y compris ceux CPAN) à l'aide de Visual C++ pour Win64
a donné lieu à une douzaine d'avertissements par fichier de hv_func.hCes avertissements ont
été réduit au silence.

· La prise en charge de la construction sans PerlIO a été supprimée des makefiles Windows.
Les builds non-PerlIO étaient presque obsolètes dans Perl 5.18.0 et ne le sont déjà plus
accompagnés par Configurez sur les systèmes POSIX.

· Entre 2 et 6 millisecondes et sept appels d'E/S ont été économisés par tentative
ouvrez un module perl pour chaque chemin dans @INC.

· Les builds Intel C sont désormais toujours compilées avec le mode C99 activé.

· %I64d est désormais utilisé à la place de %lld pour MinGW.

· Dans la couche expérimentale « :win32 », un plantage dans « open » a été corrigé. L'ouverture a également été corrigée.
/ dev / null (qui fonctionne sous la couche par défaut ":unix" de Win32 Perl) a été implémenté
pour « :win32 ». [perl #122224]

· Une nouvelle option de makefile, « USE_LONG_DOUBLE », a été ajoutée au dmake de Windows
Makefile pour les compilations gcc uniquement. Définissez ce paramètre sur « define » si vous souhaitez que Perl utilise des fichiers longs.
double pour donner plus de précision et de portée aux nombres à virgule flottante.

OpenBSD
Sous OpenBSD, Perl utilisera désormais par défaut le système « malloc » en raison de problèmes de sécurité.
fonctionnalités qu'il offre. Le wrapper malloc de Perl est utilisé depuis la version 5.14 en raison de
des raisons de performances, mais le projet OpenBSD estime que le compromis en vaut la peine et
je préférerais que les utilisateurs qui ont besoin de vitesse le demandent spécifiquement.

[perl #122000] .

Solaris
· Nous recherchons maintenant le compilateur Sun Studio dans les deux /opt/solstudio* et
/opt/solarisstudio*.

· Les compilations sur Solaris 10 avec « -Dusedtrace » échoueraient prématurément car make ne suivait pas
Dépendances implicites pour la construction de « perldtrace.h ». Ajout d'une dépendance explicite à
« dépend ». [perl #120120]

· Les options C99 ont été nettoyées ; les astuces recherchent « solstudio » ainsi que
« SUNWspro » ; et la prise en charge de « setenv » natif a été ajoutée.

Interne Modifications


· Un support expérimental a été ajouté pour permettre aux opérations dans l'arbre d'opérations de localiser leur parent,
s'il y en a un. Ceci est activé par l'option de compilation non par défaut « -DPERL_OP_PARENT ».
il est envisagé que cela soit éventuellement activé par défaut, donc le code XS qui
accède directement au champ « op_sibling » des opérations et doit être mis à jour pour être futur-
prouvé.

Sur les builds « PERL_OP_PARENT », le champ « op_sibling » a été renommé « op_sibparent » et
Un nouveau flag, « op_moresib », a été ajouté. Sur la dernière opération d'une chaîne sœur, « op_moresib » est
false et « op_sibparent » pointe vers le parent (le cas échéant) plutôt que d'être « NULL ».

Pour que le code existant fonctionne de manière transparente, que vous utilisiez ou non « PERL_OP_PARENT », un
un certain nombre de nouvelles macros et fonctions ont été ajoutées qui devraient être utilisées, plutôt que
en manipulant directement « op_sibling ».

Dans le cas de la simple lecture de « op_sibling » pour déterminer le prochain frère ou sœur, deux nouveaux
Des macros ont été ajoutées. Voici un exemple simple d'analyse d'une chaîne sœur :

pour (; enfant->frère_op; enfant = enfant->frère_op) { ... }

devrait maintenant être écrit comme :

pour (; OpHAS_SIBLING(enfant); enfant = OpSIBLING(enfant)) { ... }

Pour modifier les optrees, une fonction à usage général « op_sibling_splice() » a été ajoutée,
qui permet la manipulation d'une chaîne d'opérations sœurs. Par analogie avec Perl
fonction "splice()", elle vous permet de supprimer zéro ou plusieurs opérations d'une chaîne sœur
et les remplace par zéro ou plusieurs nouvelles opérations. Il gère toutes les mises à jour de manière transparente.
des pointeurs frères et sœurs, parents, op_last, etc.

Si vous avez besoin de manipuler des opérations à un niveau inférieur, alors trois nouvelles macros,
« OpMORESIB_set », « OpLASTSIB_set » et « OpMAYBESIB_set » sont destinés à être des
moyen portable de définir "op_sibling" / "op_sibparent" tout en mettant à jour "op_moresib".
Le premier définit le pointeur du frère sur un nouveau frère, le second fait de l'op le dernier
frère ou sœur, et le troisième effectue conditionnellement la première ou la deuxième action. Notez que
contrairement à "op_sibling_splice()", ces macros ne maintiendront pas la cohérence dans le parent à
en même temps (par exemple en mettant à jour « op_first » et « op_last » le cas échéant).

Une fonction « Perl_op_parent() » de niveau C et une méthode « B::OP::parent() » de niveau Perl ont
a été ajoutée. La fonction C n'existe que sous les versions « PERL_OP_PARENT » (son utilisation est
(erreur de compilation sur Perls vanilla). « B::OP::parent() » existe toujours, mais sur un Perl vanilla
build renvoie toujours « NULL ». Sous « PERL_OP_PARENT », ils renvoient le parent du
l'opération actuelle, le cas échéant. La variable $B::OP::does_parent permet de déterminer si
« B » prend en charge la récupération du parent d'un op.

« PERL_OP_PARENT » a été introduit dans la version 5.21.2, mais l'interface a été considérablement modifiée
dans la version 5.21.11. Si vous avez mis à jour votre code avant les modifications de la version 5.21.11, cela peut nécessiter
Nouvelle révision. Les principaux changements depuis la version 5.21.2 sont :

· Les macros « OP_SIBLING » et « OP_HAS_SIBLING » ont été renommées « OpSIBLING » et
« OpHAS_SIBLING » pour la cohérence avec d'autres macros de manipulation d'opérations.

· Le champ « op_lastsib » a été renommé « op_moresib », et sa signification inversée.

· La macro « OpSIBLING_set » a été supprimée et remplacée par
« OpMORESIB_set » et al.

· La fonction « op_sibling_splice() » accepte désormais un argument « parent » nul où le
l'épissage n'affecte pas la première ou la dernière opération de la chaîne sœur

· Des macros ont été créées pour permettre au code XS de mieux manipuler les paramètres régionaux POSIX
Catégorie « LC_NUMERIC ». Voir « Fonctions et macros liées aux paramètres régionaux » dans perlapi.

· Le précédent « atoi » et al la fonction de remplacement, « grok_atou », a maintenant été remplacée
par « grok_atoUV ». Voir perlclib pour plus de détails.

· Une nouvelle fonction, « Perl_sv_get_backrefs() », a été ajoutée qui vous permet de récupérer les
références faibles, le cas échéant, qui pointent vers un SV.

· La fonction « screaminstr() » a été supprimée. Bien que signalée comme API publique, elle était
Non documenté et non utilisé dans les modules CPAN. Son appel est fatal depuis la version 5.17.0.

· Les fonctions "newDEFSVOP()", "block_start()", "block_end()" et "intro_my()" ont
été ajouté à l'API.

· La fonction interne « convert » dans op.c a été renommé « op_convert_list » et ajouté
à l'API.

· La fonction « sv_magic() » n'interdit plus la magie « ext » sur les valeurs en lecture seule.
tous, perl ne peut pas savoir si la magie personnalisée modifiera le SV ou non. [perl
#123103] .

· L'accès à « CvPADLIST » dans perlapi sur un XSUB est désormais interdit.

Le champ « CvPADLIST » a été réutilisé à des fins internes différentes pour les XSUB.
en particulier, vous ne pouvez plus compter sur le fait qu'il soit NULL comme test pour savoir si un CV est un
XSUB. Utilisez plutôt « CvISXSUB() ».

· Les SV de type « SVt_NV » sont désormais parfois sans corps lorsque la configuration de construction et
La plateforme le permet : spécifiquement, lorsque « sizeof(NV) <= sizeof(IV) ». « Bodiless » signifie
que la valeur NV est stockée directement dans la tête d'un SV, sans nécessiter de
Un corps distinct doit être attribué. Cette astuce est déjà utilisée pour les IV depuis la version 5.9.2.
(bien que dans le cas des IV, il soit toujours utilisé, quelle que soit la plate-forme et la version
configuration).

· Les variables $DB::single, $DB::signal et $DB::trace ont désormais des fonctions set- et get-magic qui
stocke leurs valeurs sous forme d'IV, et ces IV sont utilisées lors du test de leurs valeurs dans
« pp_dbstate() ». Cela empêche Perl de se répéter indéfiniment si un objet est surchargé.
est assigné à l'une de ces variables. [perl #122445]
.

· « Perl_tmps_grow() », qui est marqué comme API publique mais n'est pas documenté, a été
supprimé de l'API publique. Ce changement n'affecte pas le code XS qui utilise
Macro "EXTEND_MORTAL" pour pré-étendre la pile mortelle.

· Les mécanismes internes de Perl ne définissent ni n'utilisent plus l'indicateur « SVs_PADMY ». « SvPADMY() » renvoie désormais
une vraie valeur pour tout ce qui n'est pas marqué « PADTMP » et « SVs_PADMY » est désormais définie comme 0.

· Les macros « SETsv » et « SETsvUN » ont été supprimées. Elles n'étaient plus utilisées dans le
core depuis le commit 6f1401dc2a il y a cinq ans, et n'ont pas été trouvés présents sur CPAN.

· Le bit « SvFAKE » (inutilisé sur les HV) a été réservé de manière informelle par David Mitchell pour les futurs
travailler sur des vtables.

· La fonction "sv_catpvn_flags()" accepte les indicateurs "SV_CATBYTES" et "SV_CATUTF8", qui
spécifiez si la chaîne ajoutée est en octets ou en UTF-8, respectivement. (Ces indicateurs ont
(en fait, ils sont présents depuis la version 5.16.0, mais n'étaient auparavant pas considérés comme faisant partie de l'API.)

· Une nouvelle classe d'opcode, « METHOP », a été introduite. Elle contient les informations utilisées à
runtime pour améliorer les performances des appels de méthodes de classe/objet.

« OP_METHOD » et « OP_METHOD_NAMED » sont passés de « UNOP/SVOP » à
"MÉTHOP".

« cv_name() » est une nouvelle fonction API qui peut recevoir un CV ou un GV. Elle renvoie un SV.
contenant le nom de la sous-routine, à utiliser dans les diagnostics.

[perl #116735] [perl #116735]


· "cv_set_call_checker_flags()" est une nouvelle fonction API qui fonctionne comme
"cv_set_call_checker()", sauf qu'il permet à l'appelant de spécifier si l'appel
Le vérificateur nécessite un GV complet pour signaler le nom du sous-programme, ou s'il pourrait être
Un CV a été transmis. Quelle que soit la valeur transmise, elle sera acceptée par « cv_name() ».
"cv_set_call_checker()" garantit qu'il y aura un GV, mais il faudra peut-être en créer un
à la volée, ce qui est inefficace. [perl #116735]


· « CvGV » (qui ne fait pas partie de l'API) est désormais une macro plus complexe, qui peut appeler un
fonction et réifie un GV. Dans les cas où il a été utilisé comme booléen,
"CvHASGV" a été ajouté, ce qui renverra vrai pour les CV qui ont théoriquement des GV, mais
sans réifier le GV. « CvGV » renvoie désormais également un GV pour les sous-ensembles lexicaux. [perl
#120441]

· La fonction « sync_locale » de perlapi a été ajoutée à l'API publique. Modification de
Les paramètres régionaux du programme doivent être évités par le code XS. Néanmoins, certains paramètres non Perl
Les bibliothèques appelées depuis XS doivent le faire, comme « Gtk ». Dans ce cas, Perl doit
pour être informé du changement de paramètres régionaux. Utilisez cette fonction pour le faire, avant de revenir.
à Perl.

· Les définitions et les étiquettes des indicateurs dans le champ « op_private » des OP sont désormais automatiques.
généré à partir de données dans régénération/op_privateL’effet notable de ceci est que certains
de la sortie du drapeau « Concise » peut différer légèrement, et la sortie du drapeau de
« perl -Dx » peut différer considérablement (ils utilisent désormais le même ensemble d'étiquettes). De plus,
les builds de débogage ont désormais une nouvelle assertion dans « op_free() » pour garantir que l'op ne
avoir des indicateurs non reconnus définis dans « op_private ».

· La variable obsolète « PL_sv_objcount » a été supprimée.

· Perl essaie maintenant de garder la catégorie de paramètres régionaux « LC_NUMERIC » définie sur « C », sauf autour
opérations nécessitant une définition des paramètres régionaux du programme. Ceci protège
les nombreux modules XS qui ne peuvent pas gérer le caractère décimal qui n'est pas un point.
Avant cette version, Perl initialisait cette catégorie à « C », mais un appel à
« POSIX::setlocale() » le modifierait. Un tel appel modifierait alors la méthode sous-jacente.
paramètres régionaux de la catégorie « LC_NUMERIC » pour le programme, mais les paramètres régionaux exposés au code XS
restera « C ». De nouvelles macros permettent de manipuler la locale LC_NUMERIC, notamment
« STORE_LC_NUMERIC_SET_TO_NEEDED » et « STORE_LC_NUMERIC_FORCE_TO_UNDERLYING ». Voir
« Fonctions et macros liées aux paramètres régionaux » dans perlapi.

· Une nouvelle macro « isUTF8_CHAR » a été écrite qui détermine efficacement si la chaîne
donné par ses paramètres commence par un caractère codé UTF-8 bien formé.

· Les paramètres de contexte des fonctions API privées suivantes ont été supprimés :
"Perl_cast_ulong", "Perl_cast_i32", "Perl_cast_iv", "Perl_cast_uv",
"Perl_cv_const_sv", "Perl_mg_find", "Perl_mg_findext", "Perl_mg_magical",
"Perl_mini_mktime", "Perl_my_dirfd", "Perl_sv_backoff", "Perl_utf8_hop".

Notez que les versions sans préfixe de ces fonctions qui font partie de l'API publique,
tels que « cast_i32() », ne sont pas affectés.

· Les types « PADNAME » et « PADNAMELIST » sont désormais des types distincts et ne sont plus simplement
alias pour SV et AV. [perl #123223]
.

Les noms de pad sont désormais toujours en UTF-8. La macro « PadnameUTF8 » renvoie toujours « true ».
Auparavant, c'était déjà effectivement le cas, mais tout support pour deux
les représentations internes des noms de pads ont désormais été supprimées.

· Une nouvelle classe d'opérations, « UNOP_AUX », a été ajoutée. Il s'agit d'une sous-classe d'« UNOP » avec une
Champ "op_aux" ajouté, qui pointe vers un tableau d'unions de UV, SV* etc. Il est
destiné aux cas où une opération a besoin de stocker plus de données qu'un simple « op_sv » ou autre.
Actuellement, la seule opération de ce type est « OP_MULTIDEREF » (voir élément suivant).

· Une nouvelle opération a été ajoutée, « OP_MULTIDEREF », qui exécute un ou plusieurs tableaux imbriqués et
Recherches de hachage où la clé est une constante ou une variable simple. Par exemple,
expression $a[0]{$k}[$i], qui impliquait auparavant dix "rv2Xv", "Xelem", "gvsv" et
Les opérations « const » sont désormais exécutées par une seule opération « multideref ». Elles peuvent également gérer les opérations « locales »,
« existe » et « supprimer ». Une expression d'index complexe, telle que « [$i+1] », est toujours utilisée.
en utilisant "aelem"/"helem", et une recherche de tableau à un seul niveau avec un petit index constant est
toujours fait en utilisant "aelemfast".

Sélectionné Punaise Correctifs


· "close" définit désormais $!

Lorsqu'une erreur d'E/S se produit, le fait qu'il y ait eu une erreur est enregistré dans le
handle. « close » renvoie false pour un tel handle. Auparavant, la valeur de $! était
ne soit pas touché par « fermer », donc la convention courante d'écrire « fermer $fh ou mourir $! » n'a pas
ne fonctionne pas correctement. Maintenant, le handle enregistre également la valeur de $! et « close » restaure
le

· « no re » peut désormais désactiver tout ce que « use re » active

Auparavant, l'exécution de « no re » ne désactivait que quelques éléments. Désormais, elle peut tout désactiver.
les éléments activés. Par exemple, la seule façon d'arrêter le débogage, une fois activé, était de
sortir du bloc englobant ; c'est maintenant corrigé.

· "pack("D", $x)" et "pack("F", $x)" mettent désormais à zéro le remplissage sur les builds x86 long double.
Dans certaines options de construction de GCC 4.8 et versions ultérieures, ils écrasaient le zéro-
initialisation du remplissage, ou contournement complet du tampon initialisé. Cela a provoqué op/pack.t
échouer. [perl #123971]

· L'extension d'un tableau cloné à partir d'un thread parent peut entraîner une « Modification d'un
Erreurs de tentative de valeur en lecture seule lors de la tentative de modification des nouveaux éléments. [perl
#124127]

· Un échec d'assertion et un crash ultérieur avec « *x= » " a été corrigé. [perl
#123790]

· Un bug de plantage/boucle possible lié à la compilation des sous-sections lexicales a été corrigé.
[perle #124099]

· UTF-8 fonctionne désormais correctement dans les noms de fonctions, dans les terminateurs de documents HERE non cités,
et dans les noms de variables utilisés comme index de tableau. [perl #124113]


· Des correspondances de modèles globaux répétées dans un contexte scalaire sur de grandes chaînes contaminées ont été
exponentiellement lent en fonction de la position de correspondance actuelle dans la chaîne. [perl
#123202]

· Divers plantages dus à des erreurs de syntaxe dans l'analyseur ont été corrigés.
[perl #123801] [perl #123801]
[perl #123802]
[perl #123955]


· « split » dans la portée de $_ lexicale a été corrigé pour ne pas faire échouer les assertions. [perl
#123763]

· La syntaxe « my $x : attr » à l'intérieur de divers opérateurs de liste ne fait plus échouer les assertions. [perl
#123817]

· Un signe « @ » entre guillemets suivi d'un chiffre non ASCII (qui n'est pas un identifiant valide)
provoquerait le plantage de l'analyseur, au lieu d'essayer simplement le « @ » comme littéral. Ceci
a été réparé. [perle #123963]

· "*bar::=*foo::=*glob_with_hash" plante depuis Perl 5.14, mais ce n'est plus le cas.
[perle #123847]

· « foreach » dans un contexte scalaire ne poussait pas un élément sur la pile, ce qui entraînait
bugs. ("print 4, scalar do { foreach(@x){} } + 1" imprimerait 5.) Cela a été corrigé
pour renvoyer « undef ». [perl #124004]

· Plusieurs cas de données utilisées pour stocker le contenu des variables d'environnement dans le code C principal sont
Les erreurs potentiellement écrasées avant d'être utilisées ont été corrigées. [perl #123748]


· Certains modèles commençant par «/.*..../" comparé à de longues chaînes a été lent
depuis la v5.8, et certains sous la forme "/.*..../i" sont lents depuis la version 5.18. Ils sont désormais
tout est à nouveau rapide. [perl #123743] .

· La valeur visible d'origine de $/ est désormais conservée lorsqu'elle est définie sur une valeur non valide.
Auparavant, si vous définissiez $/ sur une référence à un tableau, par exemple, Perl produisait un
erreur d'exécution et non défini "PL_rs", mais le code Perl qui a vérifié $/ verrait le tableau
référence. [perl #123218] .

· Dans un modèle d'expression régulière, une classe POSIX, comme "[:ascii:]", doit être à l'intérieur d'un
classe de caractères entre crochets, comme « qr/[[:ascii:]]/ ». Un avertissement est émis lorsque quelque chose
Il semble qu'une classe POSIX ne soit pas à l'intérieur d'une classe entre crochets. Cet avertissement n'était pas
Généré lorsque la classe POSIX était niée : « [:^ascii:] ». Ce problème est désormais résolu.

· Perl 5.14.0 a introduit un bogue provoquant le plantage de « eval { LABEL: } ». Ce problème a été résolu.
corrigé. [perl #123652] .

· Divers plantages dus à des erreurs de syntaxe dans l'analyseur ont été corrigés.
[perl #123617] . [perl #123737]
. [perl #123737]
. [perl #123753]
.

· Un code comme "/$a[/" utilisé pour lire la ligne d'entrée suivante et la traiter comme si elle provenait
immédiatement après la parenthèse ouvrante. Un code invalide serait alors analysé et
s'exécute, mais certains codes provoquent des plantages, ce qui est désormais interdit. [perl #123712]
.

Correction du dépassement de capacité de l'argument « pack ». [perl #123874]
.

Correction de la gestion de « \x{} » non stricte. « \x{} » est désormais équivalent à « \x{0} » au lieu de
défaut.

« stat -t » n'est plus considéré comme empilable, tout comme « -t stat ». [perl #123816]
.

· L'élément suivant ne provoque plus de SEGV : « qr{x+(y(?0))*} ».

· Boucle infinie corrigée dans l'analyse des backrefs dans les modèles d'expressions régulières.

· Plusieurs corrections de bugs mineurs dans le comportement d'Infinity et NaN, y compris des avertissements lorsque
Chaînes de caractères de type Infinity ou NaN. Par exemple, « NaNcy » ne convertit pas en nombre.
NaN plus.

· Un bogue dans les modèles d'expressions régulières pouvant entraîner des erreurs de segmentation et d'autres plantages
a été corrigé. Ce problème se produisait uniquement dans les modèles compilés avec « /i » lors de la prise en compte
compte de la locale POSIX actuelle (ce qui signifie généralement qu'ils doivent être compilés dans
la portée de "use locale"), et il doit y avoir une chaîne d'au moins 128 consécutives
octets à faire correspondre. [perl #123539] .

· « s///g » fonctionne désormais sur des chaînes très longues (où il y a plus de 2 milliards
itérations) au lieu de mourir avec « Boucle de substitution ». [perl #103260]
. [perl #103260]
.

· "gmtime" ne plante plus avec des valeurs non numériques. [perl #123495]
.

· "\()" (une référence à une liste vide) et "y///" avec $_ lexical dans la portée, pourraient tous deux
effectuer une écriture erronée au-delà de la fin de la pile. Ces deux erreurs ont été corrigées pour étendre la
empiler en premier.

· "prototype()" sans arguments utilisé pour lire l'élément précédent sur la pile, donc
« print "foo", prototype() » afficherait le prototype de foo. Ce problème a été corrigé pour déduire $_.
à la place. [perl #123514] .

· Certains cas de sous-états lexicaux déclarés à l'intérieur de sous-états pré-déclarés pourraient planter, par exemple
exemple lors de l'évaluation d'une chaîne incluant le nom d'une variable externe, mais plus
faire.

· Certains cas de sous-états lexicaux imbriqués dans des sous-états anonymes peuvent provoquer des erreurs « Bizarre »
des erreurs de copie ou même des plantages.

· Lors de la tentative d'émission d'avertissements, le débogueur par défaut de Perl (perl5db.pl) était parfois
affichant à la place « Sous-routine indéfinie &DB::db_warn appelée ». Ce bug, qui a commencé à
se produit dans Perl 5.18, a été corrigé. [perl #123553]
.

· Certaines erreurs de syntaxe dans les substitutions, telles que "s/${<>{})//", plantaient et avaient
cela est fait depuis Perl 5.10. (Dans certains cas, le crash n'a commencé à se produire qu'à partir de 5.16.)
Le crash a bien sûr été corrigé. [perl #123542]
.

· Corriger quelques dépassements de calcul de la taille de la chaîne de caractères ; en particulier, une répétition
une expression comme « 33 x ~3 » pourrait provoquer un dépassement de tampon important puisque la nouvelle sortie
La taille du tampon n'était pas correctement gérée par « SvGROW() ». Une expression comme celle-ci est désormais disponible.
produit correctement une panique de bouclage de mémoire. [perl #123554]
.

· « formline("@...", "a"); » plantait. Le cas « FF_CHECKNL » dans « pp_formline() » ne plantait pas.
définir le pointeur utilisé pour marquer la position de la côtelette, ce qui a conduit au cas "FF_MORE"
crash avec un défaut de segmentation. Cela a été corrigé. [perle #123538]
.

· Un dépassement de mémoire tampon et un plantage possibles lors de l'analyse d'un modèle littéral pendant
la compilation d'expressions a été corrigée. [perle #123604]
.

· "fchmod()" et "futimes()" définissent désormais $! lorsqu'ils échouent en raison de la transmission d'un fichier fermé
poignée. [perl #122703] .

· « op_free() » et « scalarvoid() » ne plantent plus en raison d'un débordement de pile lors de la libération d'un
arbre opérationnel profondément récursif. [perl #108276]
.

· Dans Perl 5.20.0, le drapeau UTF-8 interne de $^N était accidentellement désactivé en cas d'accès
à partir d'un bloc de code dans une expression régulière, codant efficacement la valeur en UTF-8.
Cela a été corrigé. [perl #123135]
.

· Un appel « semctl » échoué n'écrase plus les éléments existants sur la pile, ce qui signifie
que "(semctl(-1,0,0,0))[0]" ne donne plus d'avertissement "non initialisé".

· « else{foo()} » sans espace avant « foo » est désormais plus efficace pour attribuer la bonne ligne
numéro à cette instruction. [perl #122695]
.

· Parfois, l'affectation dans « @array = split » est optimisée de sorte que « split » lui-même
écrit directement dans le tableau. Cela a provoqué un bug, empêchant cette affectation
utilisé dans un contexte lvalue. Donc, « (@a=split//,"foo")=bar() » était une erreur. (Ce bug
Cela remonte probablement à Perl 3, lorsque l'optimisation a été ajoutée.) Cela a maintenant été corrigé.
[perl #123057] .

· Lorsqu'une liste d'arguments échoue aux vérifications spécifiées par une signature de sous-routine (qui est
(encore une fonctionnalité expérimentale), les messages d'erreur résultants indiquent désormais le fichier et
numéro de ligne de l'appelant, et non de la sous-routine appelée. [perl #121374]
.

· Les opérateurs de bascule (".." et "..." dans un contexte scalaire) utilisés pour maintenir un
état pour chaque niveau de récursivité (le nombre de fois que le sous-ensemble englobant a été appelé
récursivement), contrairement à la documentation. Désormais, chaque fermeture possède un état interne
pour chaque bascule. [perl #122829]
.

· L'opérateur de bascule (".." dans un contexte scalaire) renverrait le même scalaire à chaque fois
temps, sauf si la sous-routine contenante a été appelée récursivement. Désormais, elle renvoie systématiquement
un nouveau scalaire. [perl #122829] .

· « use », « no », les étiquettes d'instruction, les blocs spéciaux (« BEGIN ») et les pods sont désormais autorisés comme
la première chose dans un bloc « map » ou « grep », le bloc après « print » ou « say » (ou autre
fonctions) renvoyant un handle, et dans "${...}", "@{...}", etc. [perl #122782]
.

· L'opérateur de répétition « x » propage désormais le contexte lvalue à son argument de gauche
lorsqu'il est utilisé dans des contextes comme « foreach ». Cela permet à « for(($#that_array)x2) { ... } » de
fonctionne comme prévu si la boucle modifie $_.

· "(...) x ..." dans un contexte scalaire utilisé pour corrompre la pile si un opérande était un objet
avec surcharge « x », provoquant un comportement erratique. [perl #121827]
.

· L'affectation à un scalaire lexical est souvent optimisée ; par exemple dans « mon $x ; $x = $y
+ $z", l'opérateur d'affectation est optimisé et l'opérateur d'ajout écrit son résultat
directement à $x. Divers bugs liés à cette optimisation ont été corrigés. Certains
les opérateurs du côté droit ne parvenaient parfois pas à attribuer la valeur du tout ou
attribuer la mauvaise valeur, ou appeler STORE deux fois ou pas du tout sur les variables liées.
Les opérateurs concernés étaient « $foo++ », « $foo-- » et « -$foo » sous « use integer »,
"chomp", "chr" et "setpgrp".

· Les affectations de liste étaient parfois boguées si le même scalaire se retrouvait des deux côtés de la liste.
Affectation due à l'utilisation de « tied », « values » ou « each ». Le résultat serait erroné.
valeur attribuée.

· « setpgrp($nonzero) » (avec un argument) a été accidentellement modifié dans la version 5.16 pour signifier
setpgrp(0). Cela a été corrigé.

· "__SUB__" pourrait renvoyer une valeur erronée ou même corrompre la mémoire sous le débogueur (le
(commutateur « -d ») et dans les sous-programmes contenant « eval $string ».

· Lorsque « sub() { $var } » devient inlinable, il renvoie désormais un scalaire différent à chaque fois,
tout comme un sous-programme non inlinable le ferait, bien que Perl optimise toujours la copie dans les cas
là où cela ne ferait aucune différence observable.

· "my sub f() { $var }" et "sub() : attr { $var }" ne sont plus éligibles pour
intégration en ligne. Le premier plantait ; le second supprimait simplement les attributs.
Une exception est faite pour l'attribut peu connu ":method", qui ne fait rien
beaucoup.

· L'intégration de sous-marins avec un prototype vide est désormais plus cohérente qu'auparavant.
Auparavant, un sous-ensemble avec plusieurs instructions, dont toutes sauf la dernière étaient optimisées
à l'écart, ne serait inlinable que s'il s'agissait d'un sous-ensemble anonyme contenant une chaîne « eval »
ou déclaration « état » ou fermeture sur une variable lexicale externe (ou toute sous-variable anonyme)
sous le débogueur). Maintenant, tout sous-ensemble qui est plié en une seule constante après
Les instructions optimisées sont éligibles à l'insertion en ligne. Ceci s'applique aux éléments
comme "sub() { jabber() si DEBUG; 42 }".

Certaines sous-routines avec un « retour » explicite étaient rendues inlinables, contrairement à la
documentation, Maintenant, "return" empêche toujours l'inlining.

Sur certains systèmes, comme VMS, « crypt » peut renvoyer une chaîne non-ASCII. Si un scalaire
assigné à avait contenu une chaîne UTF-8 auparavant, alors « crypt » ne s'éteindrait pas
l'indicateur UTF-8, corrompant ainsi la valeur de retour. Cela se produirait avec
"$lexical = crypte ...".

· « crypt » n'appelle plus « FETCH » deux fois sur un premier argument lié.

· Un here-doc non terminé sur la dernière ligne d'un opérateur de type quote ("qq[${ <
"/(?{ <

· « index() » et « rindex() » ne plantent plus lorsqu'ils sont utilisés sur des chaînes de plus de 2 Go. [perl
#121562] .

· Une petite fuite de mémoire, auparavant intentionnelle, dans « PERL_SYS_INIT »/« PERL_SYS_INIT3 » sur
Les versions Win32 ont été corrigées. Ceci pourrait affecter les intégrateurs qui créent et détruisent de manière répétée.
moteurs perl au sein du même processus.

· « POSIX::localeconv() » renvoie désormais les données pour les paramètres régionaux sous-jacents du programme, même
lorsqu'il est appelé depuis l'extérieur de la portée de « use locale ».

· « POSIX::localeconv() » fonctionne désormais correctement sur les plateformes qui n'ont pas « LC_NUMERIC »
et/ou « LC_MONETARY », ou pour lesquels Perl a été compilé pour ignorer l'un ou les deux
de ces catégories de lieux. Dans de telles circonstances, il n'existe désormais plus d'entrées pour
valeurs correspondantes dans le hachage renvoyé par « localeconv() ».

· « POSIX::localeconv() » marque désormais de manière appropriée les valeurs qu'il renvoie comme UTF-8 ou non.
Auparavant, ils étaient toujours renvoyés sous forme d'octets, même s'ils étaient censés l'être.
codé en UTF-8.

· Sous Microsoft Windows, dans le cadre de « utiliser les paramètres régionaux », le caractère POSIX suivant
les classes ont donné des résultats pour de nombreux paramètres régionaux qui n'étaient pas conformes à la norme POSIX :
"[[:alnum:]]", "[[:alpha:]]", "[[:blank:]]", "[[:digit:]]", "[[:graph:]]",
"[[:lower:]]", "[[:print:]]", "[[:punct:]]", "[[:upper:]]", "[[:word:]]", et
« [[:xdigit:]] ». Cela est dû au fait que l'implémentation Microsoft sous-jacente ne
Suivez la norme. Perl prend désormais des précautions particulières pour corriger ce problème.

· De nombreux problèmes ont été détectés par Coverityhttp://www.coverity.com/> et fixe.

· « system() » et ses amis devraient désormais fonctionner correctement sur davantage de versions Android.

En raison d'un oubli, la valeur spécifiée via "-Dtargetsh" à Configurez Ça pourrait finir
été ignoré par certains processus de construction. Cela a entraîné une compilation croisée de Perls pour
Android va se retrouver avec des versions défectueuses de « system() », « exec() » et des backticks : le
les commandes finiraient par rechercher « / Bin / sh" au lieu de "/system/bin/sh", et ce serait le cas
échoue pour la grande majorité des appareils, laissant $! comme "ENOENT".

· "qr(...\(...\)...)", "qr[...\[...\]...]", et "qr{...\{...\}...}" fonctionnent maintenant.
Auparavant, il était impossible d'échapper à ces trois caractères de gauche avec une barre oblique inverse
dans un modèle d'expression régulière où, autrement, ils seraient considérés
métacaractères, et le délimiteur d'ouverture du modèle était le caractère, et le délimiteur de fermeture
le délimiteur était son caractère miroir.

« s///e » sur des chaînes UTF-8 corrompues corrompt « pos() ». Ce bug, introduit dans la version 5.20, est
maintenant corrigé. [perl #122148] .

· Une limite non-mot dans une expression régulière (« \B ») ne correspondait pas toujours à la fin de la
chaîne ; en particulier, « q{} =~ /\B/ » ne correspondait pas. Ce bogue, introduit dans Perl 5.14,
est maintenant corrigé. [perl #122090] .

« P » =~ /(?=.*P)P/ » aurait dû correspondre, mais ce n'était pas le cas. Ce problème est maintenant corrigé. [perl #122171]
.

· Ne pas compiler « use Foo » dans une « eval » pourrait laisser une sous-routine « BEGIN » erronée
définition, qui produirait un avertissement « Subroutine BEGIN redefined » lors de la prochaine utilisation
de « use » ou d'un autre bloc « BEGIN ». [perl #122107]
.

· La syntaxe « méthode { BLOCK } ARGS » analyse désormais correctement les arguments s'ils commencent par
une accolade ouvrante. [perl #46947] .

Les bibliothèques externes et Perl peuvent avoir des conceptions différentes de ce qu'est la locale. Ceci est
problématique lors de l'analyse des chaînes de version si le séparateur numérique de la locale a été
modifié. L'analyse de version a été corrigée pour s'assurer qu'elle gère correctement les paramètres régionaux.
[perl #121930] .

· Un bogue a été corrigé où les assertions de longueur nulle et les blocs de code à l'intérieur d'un regex
pourrait amener "pos" à voir une valeur incorrecte. [perl #122460]
.

· Le déréférencement des constantes fonctionne désormais correctement pour les constantes typeglob. Auparavant,
Le glob a été transformé en chaîne et son nom a été recherché. Il est désormais utilisé. [perl]
#69456]

· Lors de l'analyse d'un sigil ("$" "@" "%" "&)" suivi d'accolades, l'analyseur n'essaie plus
pour deviner s'il s'agit d'un constructeur de blocs ou de hachage (provoquant une erreur de syntaxe lorsqu'il
devine le dernier), car il ne peut s'agir que d'un bloc.

· « undef $reference » libère désormais le référent immédiatement, au lieu de s'y accrocher
jusqu'à la prochaine instruction. [perl #122556]


· Divers cas où le nom d'un sous-marin est utilisé (chargement automatique, surcharge, messages d'erreur)
utilisé pour planter pour les sous-titres lexicaux, mais ont été corrigés.

· La recherche de mots nus essaie désormais d'éviter de vivifier les paquets s'il s'avère que le mot nu est
ce ne sera pas un nom de sous-routine.

· Compilation de constantes anonymes (par exemple, "sub () { 3 }") ne supprime plus aucun
Sous-routine nommée « __ANON__ » dans le paquet actuel. Non seulement « *__ANON__{CODE} »
corrigé, mais il y avait aussi une fuite de mémoire. Ce bug remonte à Perl 5.8.0.

· Les déclarations de stub comme « sub f; » et « sub f (); » n'effacent plus les constantes du
même nom déclaré par « use constant ». Ce bogue a été introduit dans Perl 5.10.0.

· « qr/[\N{séquence nommée}]/ » fonctionne désormais correctement dans de nombreux cas.

Certains noms connus sous le nom de « \N{...} » font référence à une séquence de plusieurs caractères, au lieu de
le caractère unique habituel. Les classes de caractères entre crochets ne correspondent généralement qu'à un seul caractère
caractères, mais une gestion spéciale a maintenant été ajoutée afin qu'ils puissent correspondre aux caractères nommés
séquences, mais pas si la classe est inversée ou si la séquence est spécifiée comme
début ou fin d'une plage. Dans ces cas, le seul changement de comportement par rapport à avant est
une légère reformulation du message d'erreur fatale donné lorsque cette classe fait partie d'un
Construction « ?[...]) ». Lorsque le « [...] » est utilisé seul, le même avertissement non fatal que
avant est levé, et seul le premier caractère de la séquence est utilisé, encore une fois comme
avant.

· Les constantes corrompues évaluées au moment de la compilation ne provoquent plus de déclarations non liées
devenir corrompu. [perle #122669]

· "open $$fh, ...", qui vivifie un handle avec un nom comme "main::_GEN_0", n'était pas
en donnant à la poignée le bon nombre de références, afin qu'une double libération puisse se produire.

· Lorsqu'il décidait qu'un mot nu était un nom de méthode, l'analyseur était confus si un
"notre" sous-marin avec le même nom existait, et recherchez la méthode dans le package du
"notre" sous-marin, au lieu du package de l'invocateur.

L'analyseur n'est plus perturbé par « \U = » dans une chaîne entre guillemets. Auparavant, il
produit une erreur de syntaxe, mais la compile désormais correctement. [perl #80368]


· L'intention des opérateurs de test de fichiers «-B» et «-T» a toujours été de traiter
Fichiers codés en UTF-8 sous forme de texte. (perlfunc a été mis à jour pour le dire.) Auparavant, il
il était possible que certains fichiers soient considérés comme UTF-8 alors qu'en réalité ils n'étaient pas UTF-8 valides.
Ce problème est désormais résolu. Les opérateurs fonctionnent désormais également sur les plateformes EBCDIC.

· Dans certaines conditions, des messages d'avertissement sont générés lors de l'exécution d'un modèle d'expression régulière
Les compilations étaient générées plusieurs fois. Ce problème a été corrigé.

· Perl 5.20.0 a introduit une régression dans laquelle une expression régulière codée en UTF-8
le modèle contenant une seule lettre minuscule ASCII ne correspond pas à sa majuscule
Contrepartie. Ce problème a été corrigé dans les versions 5.20.1 et 5.22.0. [perl #122655]


· Le pliage constant pourrait supprimer de manière incorrecte les avertissements si les avertissements lexicaux (« utiliser
« avertissements » ou « aucun avertissement ») n'étaient pas en vigueur et $^W étaient faux au moment de la compilation et
vrai au moment de l'exécution.

· Le chargement de tables Unicode pendant une correspondance d'expression régulière peut entraîner une assertion
échecs lors des builds de débogage si le match précédent utilisait exactement le même standard
expression. [perl #122747]

· Le clonage de threads fonctionnait de manière incorrecte pour les sous-sections lexicales, ce qui pouvait provoquer des plantages ou
double libération à la sortie.

· Depuis Perl 5.14.0, suppression de $SomePackage::{__ANON__} puis annulation de la définition d'un anonyme
la sous-routine pourrait corrompre les choses en interne, entraînant le plantage de Devel::Peek ou B.pm
Fournit des données incohérentes. Ce problème a été corrigé.

· "(caller $n)[3]" signale désormais les noms des sous-subdivisions lexicales, au lieu de les traiter comme
"(inconnu)".

· « sort subname LIST » prend désormais en charge l'utilisation d'un sous-nom lexical comme routine de comparaison.

· Aliasing (par exemple, via "*x = *y") pourrait confondre les affectations de liste qui mentionnent les deux
noms pour la même variable de chaque côté, ce qui entraîne l'attribution de valeurs erronées.
[perle #15667]

· Les terminateurs longs de document ici pourraient entraîner une mauvaise lecture sur les lignes d'entrée courtes. Ceci a
a été corrigé. Il est peu probable qu'un plantage ait pu se produire. Ce bug remonte à
lorsque les here-docs ont été introduits dans Perl 3.000 il y a vingt-cinq ans.

· Une optimisation dans « split » pour traiter « split /^/ » comme « split /^/m » a eu le malheur
effet secondaire de traiter également « split /\A/ » comme « split /^/m », ce qui ne devrait pas être le cas.
Cela a été corrigé. (Notez cependant que « split /^x/ » ne se comporte pas comme
"split /^x/m", qui est également considéré comme un bug et sera corrigé dans un futur
version.) [perl #122761]

· La syntaxe peu connue « my Class $var » (voir champs et attributs) pourrait prêter à confusion
dans le cadre de « utiliser utf8 » si « Classe » était une constante dont la valeur contenait Latin-1
caractères.

· Le verrouillage et le déverrouillage des valeurs via Hash::Util ou « Internals::SvREADONLY » n'ont plus
aucun effet sur les valeurs initialement en lecture seule. Auparavant, le déverrouillage de ces
les valeurs peuvent entraîner des plantages, des blocages ou d'autres comportements erratiques.

· Certaines constructions non terminées "(?(...)...)" dans les expressions régulières pourraient planter
ou donner des messages d'erreur erronés. "/(?(1)/" en est un exemple.

· "pack "w", $tied" n'appelle plus FETCH deux fois.

· Les affectations de liste telles que « ($x, $z) = (1, $y) » fonctionnent désormais correctement si $x et $y ont été
aliasé par "foreach".

· Certains modèles incluant des blocs de code avec des erreurs de syntaxe, tels que « / (?{(^{})/ », seraient
Les assertions se bloquent ou échouent lors des builds de débogage. Elles génèrent désormais des erreurs.

· Un échec d'assertion lors de l'analyse du « tri » avec le débogage activé a été corrigé. [perle
#122771] .

· "*a = *b; @a = split //, $b[1]" pourrait faire une mauvaise lecture et produire des résultats indésirables.

· Dans "() = @array = split", le "() =" au début ne perturbe plus l'optimiseur
en supposant une limite de 1.

· Les avertissements fatals n'empêchent plus la sortie d'erreurs de syntaxe. [perl #122966]
.

· Correction d'une erreur de conversion NaN double en long double sur VMS. Pour les NaN silencieux (et uniquement sur
Itanium, pas Alpha) l'infini négatif au lieu de NaN a été produit.

· Correction du problème qui faisait que « make distclean » laissait certains fichiers derrière lui de manière incorrecte.
[perl #122820] .

· AIX définit désormais correctement la longueur dans "getsockopt". [perle #120835]
. [cpan #91183]
. [cpan #85570]
.

· La phase d'optimisation d'une compilation d'expressions régulières pourrait s'exécuter « indéfiniment » et épuiser toutes les
mémoire dans certaines circonstances ; maintenant corrigé. [perl #122283]
.

· Le script de test t/op/crypt.t utilise désormais l'algorithme SHA-256 si celui par défaut est
désactivé, plutôt que de donner des échecs. [perl #121591]
.

· Correction d'une erreur de décalage d'un octet lors de la définition de la taille d'un tableau partagé. [perl #122950]
.

· Correction d'un bug qui pouvait entraîner Perl à entrer dans une boucle infinie lors de la compilation.
particulier, un tout en(1) dans une sous-liste, par exemple

sub foo { () = ($a, mon $b, ($c, faire { tout en(1) {} })) }

Le bogue a été introduit dans la version 5.20.0 [perl #122995]
.

· Sous Win32, si une variable était « localisée » dans un pseudo-processus qui a ensuite été forké,
la restauration de la valeur d'origine dans le pseudo-processus enfant a provoqué une corruption de la mémoire et
un crash dans le pseudo-processus enfant (et donc dans le processus du système d'exploitation). [perl #40565]
.

· L'appel de « write » sur un format avec un champ « ^** » pourrait produire une panique dans « sv_chop() » si
il n'y avait pas suffisamment d'arguments ou si la variable utilisée pour remplir le champ était vide.
[perl #123245] .

· Les sous-noms lexicaux non-ASCII apparaissent désormais sans caractères indésirables lorsqu'ils apparaissent par erreur
des messages.

· Le prototype de sous-routine "\@" n'aplatit plus les tableaux entre parenthèses (en prenant une
référence à chaque élément), mais prend une référence au tableau lui-même. [perl #47363]
.

· Un bloc ne contenant rien d'autre qu'une boucle « for » de style C pourrait corrompre la pile,
provoquant la perte d'éléments dans les listes situées en dehors du bloc ou leur écrasement. Ceci
pourrait se produire avec "map { for(...){...} } ..." et avec des listes contenant "do {
pour(...){...} }". [perl #123286] .

· "scalar()" propage désormais le contexte lvalue, de sorte que "for(scalar($#foo)) { ... }" peut
modifier $#foo via $_.

· "qr/@array(?{block})/" ne meurt plus avec "Copie bizarre de ARRAY". [perle #123344]
.

· « eval '$variable' » dans les sous-routines nommées imbriquées recherchait parfois une variable globale
variable même avec une variable lexicale dans la portée.

· Dans perl 5.20.0, « sort CORE::fake » où « fake » est autre chose qu'un mot-clé,
j'ai commencé à couper les 6 derniers caractères et à traiter le résultat comme un sous-nom de tri.
Le comportement précédent consistant à traiter « CORE::fake » comme un sous-nom de tri a été restauré.
[perl #123410] .

· En dehors de « utiliser utf8 », une variable lexicale Latin-1 à un seul caractère n'est pas autorisée.
message d'erreur pour cela, "Impossible d'utiliser global $foo...", donnait des résultats erronés au lieu du
Nom de variable.

· « readline » sur un handle inexistant faisait que « ${^LAST_FH} » produisait une référence à
un scalaire indéfini (ou une assertion échoue). « ${^LAST_FH} » devient alors indéfini.

· "(...) x ..." dans un contexte vide applique désormais un contexte scalaire à l'argument de gauche,
au lieu du contexte dans lequel le sous-programme actuel a été appelé. [perl #123020]
.

Connu Problèmes


· "packer" un NaN sur un Perl compilé avec Visual C 6 ne se comporte pas correctement, ce qui conduit
à un échec de test dans t/op/infnan.t. [perl 125203]


· L’objectif est que Perl puisse être recompilé pour fonctionner raisonnablement bien sur n’importe quel Unicode
version. Dans Perl 5.22, cependant, la version la plus ancienne est Unicode 5.1 (la version actuelle est
7.0).

· Plateformes EBCDIC

· Les opérateurs « cmp » (et donc « sort ») ne donnent pas nécessairement les bons résultats
lorsque les deux opérandes sont des chaînes codées en UTF-EBCDIC et qu'il y a un mélange d'ASCII
et/ou des personnages de contrôle, ainsi que d'autres personnages.

· Plages contenant « \N{...} » dans les opérateurs de translittération « tr/// » (et « y/// »)
sont traités différemment des plages équivalentes dans les modèles d'expression régulière.
Ils devraient, mais ne le font pas, faire en sorte que toutes les valeurs des plages soient traitées comme
Points de code Unicode, et non natifs. (« Expressions régulières version 8 » dans
perlre donne des détails sur la façon dont cela devrait fonctionner.)

· L'encodage et l'encodage sont pour la plupart cassés.

· De nombreux modules CPAN fournis avec le noyau présentent des échecs de tests.

· « pack »/« unpack » avec le format « U0 » peut ne pas fonctionner correctement.

· Les modules suivants sont connus pour avoir des échecs de test avec cette version de Perl. Dans
dans de nombreux cas, des correctifs ont été soumis, il y aura donc, espérons-le, de nouvelles versions bientôt :

· B::Generate version 1.50

· B::Utils version 0.25

· Version Coro 6.42

· Version du danseur 1.3130

· Data::Alias ​​version 1.18

· Data::Dump::Streamer version 2.38

· Data::Util version 0.63

· Devel::Spy version 0.07

· version de l'invocateur 0.34

· Lexical::Var version 0.009

· LWP::ConsoleLogger version 0.000018

· Version Mason 2.22

· NgxQueue version 0.02

· Padre version 1.00

· Parse::Keyword 0.08

Nécrologie


Brian McCauley est décédé le 8 mai 2015. Il était un contributeur fréquent à Usenet, Perl Monks et
d'autres forums Perl et a fait plusieurs contributions au CPAN sous le pseudo NOBULL, notamment à
la FAQ Perl. Il a participé à presque tous les YAPC::Europe et a même contribué à l'organisation
YAPC::Europe 2006 et le QA Hackathon 2009. Son esprit et son plaisir dans les systèmes complexes
étaient particulièrement apparents dans son amour des jeux de société ; de nombreux amateurs de Perl auront apprécié
Souvenirs de parties de Fluxx et d'autres jeux avec Brian. Il nous manquera.

Remerciements


Perl 5.22.0 représente environ 12 mois de développement depuis Perl 5.20.0 et
contient environ 590,000 lignes de modifications dans 2,400 fichiers de 94 auteurs.

À l'exclusion des fichiers générés automatiquement, de la documentation et des outils de publication, il y avait environ
370,000 1,500 lignes de modifications sur XNUMX fichiers .pm, .t, .c et .h.

Perl continue de prospérer dans sa troisième décennie grâce à une communauté dynamique d'utilisateurs
et développeurs. Les personnes suivantes sont connues pour avoir contribué aux améliorations qui
est devenu Perl 5.22.0 :

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

La liste ci-dessus est presque certainement incomplète car elle est générée automatiquement à partir de
historique du contrôle de version. En particulier, il n'inclut pas les noms des (beaucoup
apprécié) les contributeurs qui ont signalé des problèmes au traqueur de bogues Perl.

La plupart des changements inclus dans cette version proviennent des modules CPAN inclus dans
Le noyau de Perl. Nous sommes reconnaissants à l'ensemble de la communauté CPAN d'avoir aidé Perl à prospérer.

Pour une liste plus complète de tous les contributeurs historiques de Perl, veuillez consulter le AUTEURS
dans la distribution source Perl.

Reporting Bugs


Si vous trouvez ce que vous pensez être un bogue, vous pouvez consulter les articles récemment publiés sur le
groupe de discussion comp.lang.perl.misc et la base de données des bogues Perl à . Là
peut également être des informations àhttp://www.perl.org/>, la page d'accueil de Perl.

Si vous pensez avoir un bogue non signalé, veuillez exécuter le programme perlbug inclus avec
votre libération. Assurez-vous de réduire votre bogue à un cas de test minuscule mais suffisant. Votre bogue
rapport, avec la sortie de "perl -V", sera envoyé à [email protected] être
analysés par l'équipe de portage de Perl.

Si le bogue que vous signalez a des implications de sécurité, ce qui rend inapproprié
envoyer à une liste de diffusion publiquement archivée, alors veuillez l'envoyer à
[email protected]. Cela pointe vers un envoi fermé et non archivé
liste, qui comprend tous les principaux commiters, qui seront en mesure d'aider à évaluer l'impact
des problèmes, trouver une résolution et aider à coordonner la publication des correctifs pour
atténuer ou résoudre le problème sur toutes les plates-formes sur lesquelles Perl est pris en charge. S'il vous plaît seulement
utilisez cette adresse pour les problèmes de sécurité dans le noyau Perl, pas pour les modules indépendamment
distribué sur CPAN.

Utilisez perl5220delta en ligne à l'aide des services onworks.net


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

Commandes Linux

Ad




×
Publicité
❤ ️Achetez, réservez ou achetez ici — gratuitement, contribue à maintenir la gratuité des services.