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
Équipement bit à bit opérateurs
Une nouvelle installation expérimentale a été ajoutée qui rend les quatre opérateurs standard au niveau du bit
("& | ^ ~") traitent leurs opérandes de manière cohérente comme des nombres et introduit quatre nouveaux points
opérateurs ("&. |. ^. ~.") qui traitent leurs opérandes de manière cohérente comme des chaînes. Le même
s'applique aux variantes d'affectation ("&= |= ^= &.= |.= ^.=").
Pour l'utiliser, activez la fonction "bitwise" et désactivez les avertissements "experimental::bitwise"
Catégorie. Voir « Opérateurs de chaîne au niveau du bit » dans perlop pour plus de détails. [perl #123466]
.
Équipement double diamant opérateur
"<<>>" est comme "<>" mais utilise "open" à trois arguments pour ouvrir chaque fichier dans @ARGV. Ça signifie
que chaque élément de @ARGV sera traité comme un nom de fichier réel, et "|foo" ne sera pas
traité comme un tuyau ouvert.
Équipement "\b" frontières in Standard expressions
"qr/\b{gcb}/"
"gcb" signifie Grapheme Cluster Boundary. C'est une propriété Unicode qui trouve le
frontière entre des séquences de caractères qui ressemblent à un seul caractère à un natif
locuteur d'une langue. Perl a longtemps eu la capacité de les gérer via le "\X"
séquence d'échappement régulière. Maintenant, il existe une autre façon de les gérer. Voir "\b{},
\b, \B{}, \B" dans perlrebackslash pour plus de détails.
"qr/\b{wb}/"
"wb" signifie limite de mot. C'est une propriété Unicode qui trouve la frontière entre
mots. Ceci est similaire au simple "\b" (sans accolades) mais est plus approprié pour
traitement du langage naturel. Il sait, par exemple, que des apostrophes peuvent se produire dans le
milieu des mots. Voir "\b{}, \b, \B{}, \B" dans perlrebackslash pour plus de détails.
"qr/\b{sb}/"
"sb" signifie Sentence Boundary. C'est une propriété Unicode pour aider à l'analyse
phrases de langage. Voir "\b{}, \b, \B{}, \B" dans perlrebackslash pour plus de détails.
Non-capture 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 :
"salut" =~ /(salut|salut)/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 d'autres comportements involontaires qui
les problèmes de compatibilité descendante nous empêchent de signaler dans une expression régulière normale
compilations. Parce que le comportement de ceci est sujet à changement dans les futures versions de Perl
au fur et à mesure que nous acquérons de l'expérience, l'utilisation de ce pragma soulèvera un avertissement de catégorie
"expérimental::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, consultez
<http://www.unicode.org/versions/Unicode7.0.0/>. La version d'Unicode 7.0 fournie
avec Perl inclut une correction traitant de la mise en forme des glyphes en arabe (voir
<http://www.unicode.org/errata/#current_errata>).
"utilisation lieu" vous restreindre qui local catégories are affecté
Il est maintenant possible de passer un paramètre à "use locale" pour spécifier un sous-ensemble de locale
les catégories doivent être sensibles aux paramètres régionaux, les autres n'étant pas affectées. Voir « L'utilisation des paramètres régionaux »
pragma" dans perllocale pour plus de détails.
Perl maintenant supports POSIX 2008 local monnaie ajouts
Sur les plates-formes 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. Ce sont "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 n'implémentant ni la norme C99 ni la norme POSIX 2001,
déterminer si la locale actuelle est UTF-8 ou non dépend de l'heuristique. Ceux-ci sont
amélioré dans cette version.
Aliasing via référence
Les variables et les sous-programmes peuvent désormais être aliasés en les affectant à une référence :
\$c = \$d;
\&x = \&y;
L'aliasing peut également être accompli en utilisant une barre oblique inverse avant un itérateur "foreach"
variable; c'est peut-être l'idiome le plus utile fourni par cette fonctionnalité :
foreach \%hash (@array_of_hash_refs) { ... }
Cette fonctionnalité est expérimentale et doit être activée via "utiliser la fonctionnalité 'refaliasing'". Ce sera
avertir à moins que la catégorie d'avertissements "expérimental::refaliasing" ne soit désactivée.
Voir « Affecter des références » dans perlref
"prototype" avec aucune arguments
"prototype()" sans argument déduit maintenant $_. [perle #123514]
.
Équipement ":const" sous-programme attribuer
L'attribut "const" peut être appliqué à un sous-programme anonyme. Cela fait que le nouveau sous-marin
être exécuté immédiatement chaque fois qu'un est créé (à lorsque l'expression "sous" est
évalué). Sa valeur est capturée et utilisée pour créer un nouveau sous-programme constant qui est
revenu. Cette fonctionnalité est expérimentale. Voir « Fonctions constantes » dans perlsub.
"fileno" maintenant vos contrats on annuaire poignées
Lorsque le support approprié est disponible dans le système d'exploitation, le "fileno" intégré maintenant
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 sans une telle prise en charge, "fileno" sur un handle de répertoire
continue à 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 comme spécifié par POSIX.1-2008.
Liste formulaire of pipe ouvert mis en œuvre pour Win32
La liste sous forme de tuyau :
ouvrir mon $fh, "-|", "programme", @arguments ;
est maintenant implémenté sur Win32. Il a les mêmes limitations que "system LIST" sur Win32, puisque
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 qui lui est attribuée, tant que le
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-nombre) manipulation amélioré
Les valeurs à virgule flottante peuvent contenir les valeurs spéciales infini, infini négatif et
NaN (pas un nombre). Maintenant, nous reconnaissons et propageons plus solidement la valeur dans
calculs et, en sortie, normalisez-les aux chaînes "Inf", "-Inf" et "NaN".
Voir aussi 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 hexadécimaux à virgule flottante (comme "0x1.23p-4") sont
maintenant pris en charge, et ils peuvent être sortis avec "printf "%a"". Voir "Constructeurs de valeurs scalaires"
dans perldata pour plus de détails.
Emballage infini or pas-un-nombre développement a caractère is maintenant fatal
Avant, en essayant d'emballer l'infini ou pas un nombre dans un caractère (signé), Perl
avertir, et supposons que vous avez essayé de compresser 0xFF ; si vous l'avez donné en 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 du backtrace de niveau C (similaire à ce que
les débogueurs symboliques comme gdb le font).
Le backtrace renvoie la trace de la pile des trames d'appel C, avec les noms de symboles
(noms de fonction), les noms d'objet (comme "perl"), et si possible, aussi 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 "Configurer -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-stack-smashing "-fstack-protector" depuis
5.10.1. Désormais, Perl utilise la nouvelle variante appelée "-fstack-protector-strong", si elle est disponible.
Notre Coffre-fort module pourriez permettre au contrôle Forfaits à be remplacé
Correction d'un bug critique : les packages externes pouvaient être remplacés. Safe a été patché à 2.38 à
résoudre ce problème.
Perl is maintenant toujours compilé avec "-D_FORTIFY_SOURCE=2" if disponibles
L'option 'code hardening' 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 un pas énorme puisque dans de nombreuses plateformes, le pas avait déjà
été prise il y a plusieurs années : de nombreuses distributions Linux (comme Fedora) l'utilisent
option pour Perl, et OS X applique la même chose depuis de nombreuses années.
Incompatible Modifications
Sous-programme signatures déménagé avant attributs
La fonctionnalité expérimentale de sous-signatures, telle qu'introduite dans 5.20, a analysé les signatures après
les attributs. Dans cette version, suite aux commentaires 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
any) et avant la liste d'attributs (le cas échéant).
"&" et "\&" prototypes accepte uniquement sous-marins
Le caractère prototype "&" n'accepte désormais que les sous-titres anonymes ("sub {...}"), les choses
commençant par "\&", ou un "undef" explicite. Auparavant, il autorisait aussi à tort
références à des tableaux, des hachages et des listes. [perle #4539]
. [perl #4539]
. [perl #123062]
.
De plus, le prototype "\&" autorisait les appels de sous-programmes, alors qu'il n'autorise désormais que
sous-routines : &foo est toujours autorisé en tant qu'argument, tandis que "&foo()" et "foo()" ne
sont. [perle #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 affecter négativement des 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
pas d'indice). Auparavant, une tranche de liste renvoyait une liste vide si tous les indices tombaient
en dehors de la liste d'origine ; maintenant, il renvoie une liste de valeurs "undef" dans ce cas. [perle
#114498] .
"\N{}" avec a séquence of plusieurs surpeuplés is maintenant a fatal erreur
Par exemple, "\N{TOO MANY SPACES}" ou "\N{TRAILING SPACE }". Ceci est obsolète depuis
v5.18.
"utilisation UNIVERSEL '...'" is maintenant a fatal erreur
L'importation de fonctions depuis « UNIVERSAL » est dépréciée depuis la v5.12, et est maintenant une fatalité
Erreur. "utiliser UNIVERSAL" sans aucun argument est toujours autorisé.
In double guillemet "\cX", X doit maintenant be a imprimable ASCII caractère
Dans les versions précédentes, le fait de ne pas le faire générait un avertissement d'obsolescence.
Scission le tokens "(?" et "(*" in Standard expressions is maintenant a fatal compilation Erreur.
Ceux-ci étaient obsolètes depuis la v5.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 qu'Unicode désigne à cet effet ont été traités. le
les autres maintenant 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 sont pas
précédé d'une barre oblique inverse a déclenché un avertissement de dépréciation depuis la v5.18. Maintenant, ils seront
ignoré.
Commentaires lignes dans les "(?[ ])" are maintenant terminé uniquement by a "\n"
"(?[ ])" est une fonctionnalité expérimentale, introduite dans la v5.18. Il fonctionne comme si "/x" était
toujours activé. Mais il y avait une différence : les lignes de commentaires (suivant un caractère "#")
ont été terminés par tout ce qui correspond à "\R" qui inclut tous les espaces verticaux, tels que
flux de formulaires. Par souci de cohérence, cela est maintenant modifié pour correspondre à ce qui termine les lignes de commentaire
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 des opérations d'ensemble dans des modèles d'expression régulière. Antérieur à
cela, l'opérateur d'intersection avait la même priorité que les autres opérateurs binaires.
Maintenant, il a une priorité plus élevée. Cela pourrait conduire à des résultats différents de ceux du code existant
attend (bien que la documentation ait toujours noté que ce changement pourrait se produire,
recommander de mettre entièrement les expressions entre parenthèses). Voir "Caractère entre crochets étendu
Classes" dans perlrecharclass.
Omettre "%" et "@" on hachage et tableau noms is aucune plus long permis
L'ancien Perl vous permet d'omettre le "@" sur les noms de tableaux et le "%" sur les noms de hachage dans certains
taches. Cela a émis un avertissement de dépréciation depuis Perl 5.000, et n'est plus
permis.
"$!" texte is maintenant in English au contrôle le portée of "utilisation lieu"
Auparavant, le texte, contrairement à presque tout le reste, sortait toujours sur la base de la
locale sous-jacente du programme. (Également affecté sur certains systèmes est "$^E".) Pour les programmes
qui ne sont pas préparés à gérer les différences de paramètres régionaux, cela peut entraîner la
affiché. Il est préférable d'afficher du texte traduisible via un outil plutôt que des ordures
texte qui est beaucoup plus difficile à comprendre.
"$!" texte sera be revenu in UTF-8 quand approprié
La stringification de $! et $^E aura le drapeau UTF-8 défini lorsque le texte est réellement
UTF-8 non ASCII. Cela permettra aux programmes configurés pour être sensibles aux paramètres régionaux de
des messages de sortie dans la langue maternelle de l'utilisateur. Code qui doit continuer le 5.20 et
un comportement antérieur peut effectuer la chaîne dans les domaines à la fois « use d'octets » et
"utiliser les paramètres régionaux ":messages"". Dans ces deux périmètres, aucune autre opération Perl ne sera
affecté par le lieu ; seulement $! et la stringification $^E. Le pragma "bytes" provoque l'UTF-8
flag ne doit pas être défini, comme dans les versions précédentes de Perl. Cela résout [perl #112208]
.
Assistance pour "?SCHÉMA?" sans explicite opérateur a était enlevé
Le "m?MOTIF?" construction, qui permet de faire correspondre une regex une seule fois, avait auparavant un
forme alternative qui a été écrite directement avec un délimiteur de point d'interrogation, en omettant le
opérateur "m" explicite. Cette utilisation a produit un avertissement de dépréciation depuis 5.14.0. Il est
maintenant une erreur de syntaxe, de sorte que le point d'interrogation peut être disponible pour une utilisation dans de nouveaux opérateurs.
"défini (@tableau)" et "défini (% hachage)" are 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 are maintenant fatal erreurs
Par exemple, "%foo->{"bar"}" provoque désormais une erreur de compilation fatale. Ceux-ci ont été
obsolète depuis avant la v5.8, et ont émis des avertissements d'obsolescence depuis lors.
Modifications à le "*" prototype
Le caractère "*" dans le prototype d'un sous-programme utilisé pour permettre aux mots nus d'avoir la priorité
sur la plupart des noms de sous-programmes, mais pas tous. Il n'a jamais été cohérent et montrait un buggy
comportement.
Maintenant, il a été modifié, de sorte que les sous-programmes 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 splat (*) { ... }
sous foo { ... }
splat (foo); # maintenant toujours splat(foo())
splat (barre); # toujours splat('bar') comme avant
fermer(toto); # close(foo())
fermer (barre); # close('bar')
Dépréciations
Paramètres "${^ENCODAGE}" à quoi que ce soit d'artificiel mais "undef"
Cette variable permet aux scripts Perl d'être écrits dans un encodage autre que ASCII ou UTF-8.
Cependant, cela affecte tous les modules dans le monde, entraînant 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 se fait facilement avec l'utilitaire piconv.
Utilisez of non graphique caractères in caractère unique variable noms
La syntaxe pour les noms de variables à un seul caractère est plus clémente que pour les 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éprécié les commandes de plage ASCII en tant que tel. Maintenant tout
les caractères non graphiques qui étaient auparavant autorisés sont obsolètes. L'effet pratique de
cela se produit uniquement lorsqu'il n'est pas sous "utiliser utf8", et affecte uniquement les contrôles C1 (points de code
0x80 à 0xFF), NO-BREAK SPACE et SOFT TETE.
Inliner of "sous () { $var }" avec observable Effets secondaires
Dans de nombreux cas, Perl fait de "sub () { $var }" un sous-programme constant inlinable,
capturer la valeur de $var au moment où l'expression "sub" est évaluée. Cela peut casser
le comportement de fermeture dans les cas où $var est modifié par la suite, puisque le
le sous-programme ne renverra pas la valeur modifiée. (Notez que tout cela ne s'applique qu'aux anonymes
sous-routines avec un prototype vide ("sub ()").)
Cette utilisation est maintenant dépréciée dans les cas où la variable pourrait être modifiée
autre part. Perl détecte ces cas et émet un avertissement de dépréciation. Un tel code sera
changera probablement à l'avenir et cessera 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-inlinable sans avertissements.
sous make_constant {
mon $var = décalage ;
return sub () { $var } ; # amende
}
sous make_constant_deprecated {
mon $var ;
$var = décalage ;
return sub () { $var } ; # obsolète
}
sous make_constant_deprecated2 {
mon $var = décalage ;
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 affecté qu'une seule fois est trop difficile à
détecter. Que cela se produise à un endroit autre que la déclaration "mon" est suffisant pour que Perl
trouve ça suspect.
Cet avertissement de dépréciation se produit uniquement pour une variable simple pour le corps du sous-marin. (UNE
Le bloc "BEGIN" ou l'instruction "use" à l'intérieur du sub 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'inline ne
pas arriver si la variable est modifiable ailleurs. De tels cas devraient être rares.
Utilisez of plusieurs "/ X" regexp modificateurs
Il est désormais obsolète de dire quelque chose comme l'un des éléments suivants :
qr/foo/xx ;
/(?xax:foo)/;
utilisez re qw(/amxx);
C'est-à-dire que maintenant "x" ne devrait apparaître qu'une seule fois dans n'importe quelle chaîne d'expression régulière contiguë
modificateurs de motifs. Nous ne pensons pas que cela se produise dans tout le CPAN.
Ceci est en préparation pour une future version de Perl ayant "/xx" permettant un espace blanc pour
lisibilité dans les classes de caractères entre crochets (celles entre crochets : "[...]").
En utilisant a PAS DE 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 faisant précéder d'une barre oblique inverse
("\{") ou en l'entourant de crochets "[{]", ou en utilisant "\Q" ; sinon un
un avertissement de dépréciation sera émis. Cela a d'abord été annoncé comme à venir dans la v5.16
Libération; cela permettra aux futures extensions du langage de se produire.
Fabrication tous avertissements fatal is découragé
La documentation des avertissements fatals note que "utiliser les avertissements FATAL => 'tous'" est
découragé, et fournit un langage plus fort sur les risques d'avertissements fatals en général.
Performance Améliorations
· Si une méthode ou un nom de 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 à
temps de compilation, pour éviter d'avoir à les analyser au moment de l'exécution.
· Les recherches de tableau et de hachage (en particulier celles imbriquées) qui n'utilisent que des constantes ou de simples
variables en tant que clés, sont maintenant considérablement plus rapides. Voir « Changements internes » pour en savoir plus
détails.
· "(...)x1", "("constant")x0" et "($scalar)x0" sont désormais optimisés en contexte de liste. Si
l'argument de droite est une constante 1, l'opérateur de répétition disparaît. Si la
l'argument de droite est une constante 0, l'expression entière est optimisée pour le vide
list, tant que l'argument de gauche est un simple scalaire ou une constante. (C'est-à-dire,
"(foo())x0" n'est pas soumis à cette optimisation.)
· L'affectation "substr" est maintenant optimisée en "substr" à 4 arguments à la fin d'un
sous-routine (ou comme argument de "retour"). Auparavant, cette optimisation uniquement
s'est passé dans un contexte vide.
· Dans "\L...", "\Q...", etc., l'opération supplémentaire "stringify" est maintenant optimisée, ce qui rend
ceux-ci sont aussi rapides que "lcfirst", "quotemeta", etc.
· L'affectation à une liste vide est maintenant parfois plus rapide. En particulier, il n'appelle jamais
"FETCH" sur les arguments liés du côté droit, alors qu'il le faisait parfois.
· Il y a une amélioration des performances allant jusqu'à 20 % lorsque la « longueur » est appliquée à un
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 de perl avec des entiers 64 bits, l'utilisation de la mémoire pour non-magique, non liée
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 sur le tableau. Cette optimisation se produisait uniquement pour les tableaux de packages autres
que @_, et seulement parfois. Maintenant, cette optimisation se produit presque tout le temps.
· « joindre » est maintenant soumis à un repliement constant. Ainsi, par exemple, "rejoindre "-", "a", "b"" est
converti au moment de la compilation en "ab". De plus, "joindre" avec un scalaire ou une constante pour
le séparateur et une liste à un seul élément à joindre sont simplifiés en une chaîne, et
le séparateur n'est même pas évalué.
· "qq(@array)" est implémenté en utilisant deux ops : un op de stringify et un op de jointure. Si le "qq"
ne contient rien d'autre qu'un seul tableau, la stringification est optimisée.
· "our $var" et "our($s,@a,%h)" dans le contexte void ne sont plus évalués au moment de l'exécution.
Même une séquence entière de "notre $foo;" les instructions seront simplement ignorées. Le même
s'applique aux variables "d'état".
· De nombreuses fonctions internes ont été refactorisées pour améliorer les performances et réduire leur
empreintes de mémoire. [perle #121436]
[perle #121906] [perle #121906]
· Les tests de fichiers "-T" et "-B" seront renvoyés plus tôt lorsqu'un fichier vide est détecté. [perle
#121489]
· Les recherches de hachage où la clé est une constante sont plus rapides.
· Les sous-programmes avec un prototype vide et un corps contenant juste "undef" sont maintenant
éligibles à l'inline. [perle #122728]
· Les sous-routines des packages n'ont plus besoin d'être stockées dans des typeglobs : déclarer un
la sous-routine mettra maintenant une simple sous-référence directement dans la cachette si possible,
économiser de la mémoire. Le typeglob existe toujours théoriquement, donc y accéder provoquera le
entrée stash à mettre à niveau vers un typeglob (à c'est juste une implémentation interne
détail). Cette optimisation ne s'applique actuellement pas aux XSUB ou aux sous-programmes exportés,
et les appels de méthode l'annuleront, car ils cachent des choses 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 plates-formes ASCII. Il n'y a maintenant même pas une performance minimale
frappé en é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 maintenant mappées en mémoire à partir du disque et partagées entre les processus du
même binaire perl.
formation vidéo et Pragmatique
Le kit de préparation mis à jour formation vidéo et Pragmatique
La plupart des bibliothèques distribuées avec perl ont été mises à jour depuis la v5.20.0. Pour un
liste complète des modifications, exécutez :
liste de noyaux --diff 5.20.0 5.22.0
Vous pouvez également substituer votre version préférée à la place de 5.20.0.
Certains changements notables incluent :
· Archive : : Le goudron a été amélioré à 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. [perle #122629]
· B a été mis à niveau vers la version 1.58.
Il fournit une nouvelle fonction "B::safename", basée sur l'existant "B::GV->SAFENAME",
qui convertit "\cOPEN" en "^OPEN".
Les COP nuls sont désormais de classe "B::COP", au lieu de "B::OP".
Les objets "B::REGEXP" fournissent désormais une méthode "qr_anoncv" pour accéder au CV implicite
associé à des choses "qr//" contenant des blocs de code, et une méthode "compflags" qui
renvoie les drapeaux pertinents provenant de l'op "qr//blahblah".
"B::PMOP" fournit désormais une méthode "pmregexp" renvoyant un objet "B::REGEXP". Deux nouveaux
classes, "B::PADNAME" et "B::PADNAMELIST", ont été introduites.
Un bug où, après une création de threads ou un pseudofork, des SV spéciaux/immortels dans le
l'enfant ithread/psuedoprocess n'avait pas la classe correcte de "B::SPECIAL", a été
fixé. 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 maintenant vidés avec des mnémoniques comme ils le seraient pour le
contreparties non nulles.
· B::Deparse a été mis à niveau vers la version 1.35.
Il sépare désormais correctement "+sub : attr { ... }" au début d'une instruction. Sans
l'initiale "+", "sub" serait une étiquette de déclaration.
Les blocs "BEGIN" sont désormais émis au bon endroit la plupart du temps, mais le changement
malheureusement introduit une régression, en ce sens que les blocs "BEGIN" se produisent juste avant
la fin du bloc englobant peut apparaître en dessous à la place.
"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 contient un "do"
bloquer. [perle #115066]
Les tableaux entre parenthèses dans les listes passées à "\" sont désormais correctement séparés avec
parenthèses (par exemple, "\(@a, (@b), @c)" conserve désormais les parenthèses autour de @b), ainsi
en préservant le comportement d'aplatissement des tableaux entre parenthèses référencés. Autrefois, il
n'a fonctionné que pour un seul tableau : "\(@a)".
"local our" est maintenant supprimé correctement, avec le "our" inclus.
"for($foo; !$bar; $baz) {...}" a été supprimé sans le "!" (ou non"). Cela a été
fixé.
Les mots-clés principaux qui entrent en conflit avec les sous-programmes lexicaux sont désormais séparés par le
Préfixe « CORE : : ».
"foreach state $x (...) {...}" se sépare désormais correctement avec "state" et non "my".
"our @array = split(...)" se sépare désormais correctement de "our" dans les cas où le
l'affectation est optimisée.
Il sépare maintenant "notre(LISTE)" et tapé correctement le lexique ("my Dog $spot").
Déparez $#_ comme cela au lieu de $#{_}. [perl #123947]
Les blocs BEGIN à la fin de la portée englobante sont maintenant séparés au bon endroit.
[perle #77452]
Les blocs BEGIN étaient parfois déparés comme __ANON__, mais sont maintenant toujours appelés BEGIN.
Les sous-routines lexicales sont maintenant complètement déparées. [perle #116553]
"Anything =~ y///r" avec "/r" n'omet plus l'opérande de gauche.
Les arborescences d'opérations qui composent les blocs de code d'expression régulière sont maintenant séparées pour de vrai. Autrefois, le
chaîne d'origine qui composait l'expression régulière a été utilisée. Cela a causé des problèmes
avec "qr/(?{<
[perl #123217] [perl #115256]
$ ; à la fin d'une instruction ne perd plus son point-virgule. [perle #123357]
Certains cas de déclarations de sous-programmes stockés dans la cachette 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 y a 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 prototypes sont séparés avec "&" (par exemple, sous la -P option), "scalaire"
est maintenant ajouté le cas échéant, pour forcer le contexte scalaire impliqué par le prototype.
"require(foo())", "do(foo())", "goto(foo())" et des constructions similaires avec des contrôles de boucle
sont maintenant supprimés correctement. Les parenthèses extérieures ne sont pas facultatives.
L'espace blanc n'est plus échappé dans les expressions régulières, car il devenait
échappé par erreur dans les sections "(?x:...)".
"sub foo { foo() }" est maintenant séparé de ces parenthèses obligatoires.
"/@array/" est maintenant séparé en tant qu'expression régulière, et pas seulement @array.
"/@{-}/", "/@{+}/" et $#{1} sont maintenant séparés par les accolades, qui sont obligatoires dans
ces cas.
Lors de l'analyse des bundles de fonctionnalités, "B::Deparse" n'émettait "aucune fonctionnalité ;" d'abord au lieu de
"pas de fonctionnalité ':all';". Cela a été corrigé.
"chdir FH" est maintenant séparé sans guillemets.
"\my @a" est maintenant séparé sans parenthèses. (Les parenthèses aplatiraient le tableau.)
"system" et "exec" suivis d'un bloc sont désormais supprimés correctement. Autrefois là
était un "faire" erroné avant le blocage.
"use constant QR => qr/.../flags" suivi de """ =~ QR" n'est plus sans le
drapeaux.
Déparer "BEGIN { undef &foo }" avec le -w interrupteur activé a commencé à émettre
avertissements 'non initialisés' dans Perl 5.14. Cela a été corrigé.
L'analyse des appels aux sous-marins avec un prototype "(;+)" a entraîné une boucle infinie. le
Les prototypes "(;$") "(_)" et "(;_)" ont reçu la mauvaise priorité, provoquant
"foo($a<$b)" à séparer sans les parenthèses.
Deparse fournit désormais un sous-état défini dans les sous-marins internes.
· B::Op_private a été ajouté.
B::Op_private fournit des informations détaillées sur les drapeaux utilisés dans le "op_private"
champ des opcodes perl.
· bigint, bignum, bigrat ont été mis à niveau vers la version 0.39.
Documenter dans CAVEATS 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à. [perle #121574]
Carp gère désormais mieux les plates-formes non ASCII.
Correction d'erreur un par un pour Perl < 5.14.
· constant a été mis à niveau vers la version 1.33.
Il accepte désormais les noms de constantes pleinement qualifiés, permettant de définir des constantes dans
paquets autres que l'appelant.
· CPAN a été mis à niveau vers la version 2.11.
Ajout de la prise en charge de "Cwd::getdcwd()" et introduction d'une solution de contournement pour un mauvais comportement observé sur
Fraise Perl 5.20.1.
Correction de "chdir()" après le bogue des dépendances de construction.
Introduire la prise en charge expérimentale des plugins/hooks.
Intégrez les sources "App::Cpan".
Ne pas vérifier 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 dans "version::vpp" détectant la magie des chaînes de caractères et ajoute la prise en charge
pour le prochain bootstrap ExtUtils::MakeMaker version.pm pour les Perls antérieurs à 5.10.0.
· Données : : Dumper a été amélioré à 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 couverture. XS dumps stocké de manière incorrecte le nom du code
références stockées dans un GLOB. [perle #122070]
· DynaLoader a été mis à niveau vers la version 1.32.
Supprimez "dl_nonlazy" global s'il n'est pas utilisé dans Dynaloader. [perle #122926]
· Encode a été mis à niveau vers la version 2.72.
"piconv" a maintenant 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,
rupture de l'analyse des définitions de code d'erreur. [rt.perl.org #123784]
· expérimental a été mis à niveau vers la version 0.013.
Fonctionnalités des codes en dur pour Perls antérieurs à 5.15.7.
· ExtUtils::CBuilder a été mis à niveau vers la version 0.280221.
Corrige une régression sur Android. [perle #122675]
· ExtUtils::Le manifeste a été mis à niveau vers la version 1.70.
Corrige un bogue avec la gestion par "maniread()" des noms de fichiers entre guillemets et améliore "manifind()"
pour suivre les liens symboliques. [perl #122415]
· ExtUtils::ParseXS a été mis à niveau vers la version 3.28.
Ne déclarez "file" inutilisé que si nous le définissons réellement. 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 mappage de type "/OBJ$/" à "/REF$/" pour la méthode "DESTROY". [perle
#123418]
· Fcntl a été mis à niveau vers la version 1.13.
Ajout de la prise en charge des commandes Linux pipe buffer size "fcntl()".
· Fichier::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é
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. [perle
#123606]
· HTTP : : Tiny a été mis à niveau vers la version 0.054.
"keep_alive" est désormais sécurisé pour les fourches et les threads.
· IO a été mis à niveau vers la version 1.35.
L'implémentation XS a été corrigée pour le bien des anciens Perls.
· IO : : La prise a été améliorée à 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.
Un meilleur correctif pour le sous-classement "connect()". [cpan #95983]
[cpan #95983]
Implémente le délai d'attente 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 sur "Net::FTP", "Net::NNTP", "Net::POP3" et "Net::SMTP".
Améliorations de 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 les données des feuilles de calcul qui empêchait le
Code de devise SHP d'être trouvé. [cpan #94229]
De nouveaux codes ont été ajoutés.
· Mathématiques : : BigInt a été amélioré à la version 1.9997.
Synchronisez les modifications de POD à partir de la version CPAN. "Math::BigFloat->blog(x)" serait
renvoient parfois "blog(2*x)" lorsque la précision est supérieure à 70 chiffres. Le résultat
de "Math::BigFloat->bdiv()" dans le contexte de liste satisfait maintenant "x = quotient * diviseur +
reste".
Gestion correcte des sous-classes. [cpan #96254]
[cpan #96254]
· Module : : les métadonnées ont été mises à niveau vers la version 1.000026.
Prend en charge les installations sur des perls plus anciens avec un ExtUtils::MakeMaker antérieur à 6.63_03
· la surcharge a été mise à 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 premier "//" en "/" sur Cygwin. [perle #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" va maintenant créer une nouvelle fenêtre pour le fork
traiter. [perle #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". [perle #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
déposer. [perle #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 emplacements de fichiers impossibles pour la plate-forme échouent désormais plus tôt
plutôt que d'envelopper à 4 Go.
· Pod : : Perldoc a été amélioré à la version 3.25.
Les descripteurs de fichiers ouverts pour la lecture ou l'é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 du C99 (par exemple "acosh", "isinf", "isnan", "round",
"tronc" ; "M_E", "M_SQRT2", "M_PI") ont été ajoutés.
"POSIX::tmpnam()" génère désormais un avertissement de dépréciation. [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é de "Sub::Name"). L'utilisation de "GetMagic" dans "List::Util::reduce()" a également
été corrigé. [cpan #63211]
· SDBM_File a été mis à niveau vers la version 1.13.
Simplification du processus de construction. [perl #123413]
· Temps : : Le morceau a été amélioré à la version 1.29.
Lors d'un joli tirage négatif "Time::Seconds", 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 en tant que 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 valeur_propriété() a été ajouté pour retourner une propriété donnée possible
valeurs.
Une nouvelle fonction charprop() a été ajouté pour retourner 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 propalias() renvoie les noms courts et longs corrects
pour les extensions Perl où il était incorrect.
Un bug a été corrigé afin que prop_value_aliases() renvoie "undef" au lieu d'un faux
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
faveur de la documentation. Le deuxième argument facultatif est désormais correctement traité comme un
booléen perl (sémantique vrai/faux) et non sous forme d'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 construction en mode C++ fonctionne désormais.
· Win32API::Le fichier a été mis à niveau vers la version 0.1202
La construction en mode C++ fonctionne maintenant.
· XSLoader a été mis à niveau vers la version 0.20.
Autorisez XSLoader à charger des modules à partir d'un espace de noms différent. [perl #122455]
Supprimé formation vidéo et Pragmatique
Les modules suivants (et les modules associés) ont été supprimés du noyau perl
Distribution:
· Image de synthèse
· Module :: Construire
Documentation
Équipement 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 maintenant
inclus.
· Les entrées sont désormais organisées en groupes plutôt qu'en fonction du fichier où 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 rendre les entrées plus faciles à trouver lors de la numérisation.
données perl
· La syntaxe des noms de variables à un seul caractère a été mise à jour et plus
entièrement expliqué.
· Les nombres hexadécimaux à virgule flottante 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 à
Assistance EBCDIC.
perfiltre
· Ajout d'une section LIMITATIONS.
perfunc
· Mentionnez que "study()" est actuellement un no-op.
· L'appel de « delete » ou « exists » sur les valeurs du 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 sur Win32. Seulement le
la syntaxe d'objet indirect "exec PROGRAM LIST" et "system PROGRAM LIST" seront fiables
évitez d'utiliser la coque.
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 de l'offset.
· 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 le traitement 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 sur les tests de performance
astuces perlhack
· De la documentation a été ajoutée illustrant les dangers de supposer qu'il n'y a pas de
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 de "tmpfile", "atoi", "strtol" et "strtoul" sont maintenant recommandés.
· Documentation mise à jour pour la cible "test.valgrind" "make". [perle #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 un backtrace 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
· Mise à jour pour les améliorations dans la v5.22, avec quelques clarifications.
style perlmod
· Au lieu de pointer vers la liste des modules, nous pointons maintenant vers PrePAN
<http://prepan.org/>.
perlop
· Mise à jour pour les améliorations dans la v5.22, avec quelques clarifications.
perlpodspec
· La spécification de la langue du pod est en train de changer de sorte que l'encodage par défaut des pods
qui ne sont pas en UTF-8 (sauf indication contraire) est CP1252 au lieu de 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 clarifications ont été apportées quant aux types de modifications autorisées en matière de 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 noter 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 à 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 aux "Plages de caractères" dans perlrecharclass à l'effet
"[AZ]", "[az]", "[0-9]" et toutes ses sous-plages dans l'expression régulière entre crochets
les classes de caractères sont garanties pour correspondre exactement à ce qu'un anglophone naïf ferait
attendez-vous à ce qu'ils correspondent, même sur des plates-formes (telles que EBCDIC) où perl doit faire plus
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és").
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'énoncé "..." a été corrigée. [perle
#122661]
· Le conditionnel vide dans "for" et "while" est maintenant documenté dans perlsyn.
perlunicode
· Cela a fait l'objet de nombreuses révisions pour le mettre à jour avec la prise en charge actuelle d'Unicode
et pour le rendre plus lisible. Il est à noter qu'Unicode 7.0 a changé ce qu'il devrait faire
avec des non-personnages. Perl conserve l'ancienne méthode de gestion pour des raisons de retard
compatibilité. Voir "Points de code sans caractère" dans perlunicode.
perluniintro
· Conseils pour vous assurer que vos chaînes et 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. Au lieu de cela, une discussion a été ajoutée sur le
avantages et inconvénients de son utilisation par rapport à $^V. $OLD_PERL_VERSION a été rajouté
à la documentation sous la forme longue de $].
· "${^ENCODING}" est maintenant 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
· Du matériel obsolète et/ou incorrect a été supprimé.
· Documentation mise à jour sur l'interaction de l'environnement et du 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.
Équipement Diagnostics
Équipement Erreurs
· Mauvais symbole pour 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'aurait 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 permettaient cette syntaxe, mais n'auraient pas dû.
· Impossible d'utiliser 'defined(@array)' (peut-être devriez-vous simplement omettre le défini()?)
(F) "defined()" n'est pas utile sur les tableaux car il vérifie un indéfini scalaire
valeur. Si vous voulez voir si le tableau est vide, utilisez simplement
"if (@array) { # pas 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 en un caractère non signé, ce qui
ça n'a aucun sens.
· Impossible d'emballer %f avec '%c'
(F) Vous avez essayé de convertir un infini ou pas un nombre en un caractère, ce qui ne rend pas
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 charnames 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 charnames ne peuvent pas contenir d'espace blanc à la 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-programmes nommés
(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
format sont inconnus, donc la sortie flottante hexadécimale est impossible.
· Suidscript 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 en 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 '(*VERB...)', 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 en 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 a des zéros non significatifs, soit il représente un trop gros
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 non définie comme
argument. "require" attend soit un nom de package, soit une spécification de fichier en tant que
argument. Voir "exiger" dans perlfunc.
Auparavant, "require" sans argument ou "undef" avertissait d'un nom de fichier Null.
Équipement Avertissements
· \C est obsolète dans regex
(D obsolète) La classe de caractères "/\C/" était obsolète dans la v5.20, et émet désormais un
avertissement. Il est prévu que cela devienne une erreur dans la v5.24. Cette classe de caractères
correspond à un seul octet même s'il apparaît dans un caractère multi-octets, casse
encapsulation et peut corrompre les chaînes UTF-8.
· "%s" est plus clairement écrit simplement comme "%s" dans l'expression régulière ; marqué par <-- ICI en 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.
· Argument "%s" 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 ou aucune des extrémités de plage doivent être Unicode dans l'expression régulière ; marqué par <-- ICI en 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 de faire %s("%s") sur des paramètres régionaux non UTF-8 ; résolu à "%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 susceptibles d'entrer 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) La virgule flottante hexadécimale a un exposant plus grand que le flottant
appuis ponctuels.
· Flottant hexadécimal : dépassement inférieur de l'exposant
(W overflow) La virgule flottante hexadécimale a un exposant plus petit que le flottant
appuis ponctuels.
· Flottant hexadécimal : débordement 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 connu sous le nom de fraction ou le significand)
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).
· La locale '%s' peut 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.
· l'heure locale(%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".
· Le 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 NO-BREAK dans une définition d'alias de charnames 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 fini 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 n'ont tous leurs points de terminaison un caractère littéral, et pas une évasion
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é 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. 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 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 « redondants » 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 accidentellement pas affiché
si la translittération contenait des caractères larges. Ceci est maintenant corrigé, afin que vous puissiez
voir ce diagnostic dans des endroits où vous ne l'avez pas fait auparavant (mais auriez dû).
· L'utilisation de \b{} pour les paramètres régionaux non UTF-8 est incorrecte. En supposant une locale 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 regex ; marqué par <-- ICI en 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 sorte que le
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 déconseillée, transmise dans l'expression régulière ; marqué 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
se référer à la ^ FOO les variables, telles que $^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 accidentellement pas affiché
si la translittération contenait des caractères larges. Ceci est maintenant corrigé, afin que vous puissiez
voir ce diagnostic dans des endroits où vous ne l'avez pas fait auparavant (mais auriez dû).
· "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
manières incompatibles; il y a aussi des propositions pour changer la façon d'activer un contrôle strict
au lieu d'utiliser ce sous-pragma. Cela signifie qu'un modèle qui se compile aujourd'hui peut
pas dans une future version de Perl. Cet avertissement a pour but de vous alerter de ce risque.
· Avertissement : impossible de fermer correctement le descripteur 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 décompte de référence du descripteur de fichier a atteint zéro et le
le code de l'utilisateur n'avait pas déjà appelé "close()" ; par exemple
{
ouvrir mon $fh, '>', $file ou mourir "open: '$file': $!\n" ;
imprimer $fh, $data ou mourir ;
} # fermeture implicite ici
Dans une situation telle que le disque plein, en raison de la mise en mémoire tampon, l'erreur peut uniquement être détectée
lors de la clôture finale, il est donc dangereux de ne pas vérifier le résultat de la clôture.
Donc perl prévient maintenant dans de telles situations.
· Caractère large (U+%X) en %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 des guillemets
Cet avertissement a été remplacé par <> à l'instruction requise qui devrait être entre guillemets pour que le
question 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 l'Inf et le NaN (infini et non-nombre) le
la définition de "numérique" est quelque peu inhabituelle : les cordes 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" requiert un nom de package explicite
Ce message a eu '(avez-vous oublié de déclarer "mon %s"?)' ajouté à celui-ci, pour le rendre
plus utile aux nouveaux programmeurs Perl. [perle #121638]
· '"mon" variable &foo::bar ne peut pas être dans un package' a été reformulé pour dire 'sous-programme'
au lieu de "variable".
· \N{} dans la classe de caractères limitée à 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 de "qr/[\N{séquence nommée}]/" (voir sous
"Corrections de bugs sélectionnés").
· panique : frexp
Ce message a eu ': %f' ajouté, pour montrer ce que la virgule flottante incriminée
le numéro est.
· Possible priorité problème on bit à bit %c opérateur reformulé comme Priorité possible
problème sur l'opérateur %s au niveau du bit.
· Échec %s sur le nom de fichier contenant une nouvelle ligne
Cet avertissement n'est désormais généré que lorsque le saut de ligne se trouve à la fin du nom de fichier.
· « La variable %s ne restera pas partagée » a été modifiée pour indiquer « Sous-programme » lorsqu'elle est
en fait un sous 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 d'Unicode ajoutées.
Diagnostique Déménagements
· "L'utilisation ambiguë de -foo est résolue comme -&truc()"
Il n'y a en fait aucune ambiguïté ici, et cela empêche l'utilisation de constantes négatives ;
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 tenait pas compte de la surcharge. [perle #69456]
[perl #69456]
Services Publics Modifications
trouver2perl, p2p et a2p enlèvement
· Le x2p/ répertoire a été supprimé du noyau Perl.
Cela supprime find2perl, s2p et a2p. Ils ont tous été publiés sur CPAN séparément
distributions ("App::find2perl", "App::s2p", "App::a2p").
h2ph
· h2ph gère désormais les constantes hexadécimales dans les définitions de macro 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 recherche désormais "lrintl()", "lroundl()", "llrintl()" et "llroundl()".
· Configurez avec "-Dmksymlinks" devrait maintenant être plus rapide. [perl #122002]
.
· Les bibliothèques "pthreads" et "cl" seront liées par défaut si elles sont présentes. Ceci permet
Modules XS qui nécessitent un thread 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 maintenant utiliser le GCC
bibliothèque quadmath qui implémente les nombres à virgule flottante quadruple précision sur
plates-formes x86 et IA-64. Voir INSTALLER pour en savoir plus.
· MurmurHash64A et MurmurHash64B peuvent maintenant ê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 (Divers Attribute Decoration) a été supprimée
Il s'agissait d'une tentative non maintenue de préserver l'arbre d'analyse Perl plus fidèlement afin
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é des deux côtés 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 « Changements internes ».
· Pathtools n'essaie plus de charger XS sur miniperl. Cela accélère la construction de perl
légèrement.
Contrôle de qualité
· t/portage/re_context.t a été ajouté pour tester que utf8 et ses dépendances n'utilisent que
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 que
vars à localiser.
· Des tests pour les problèmes de performances ont été ajoutés dans le fichier t/perf/tache.t.
· Certains tests d'expressions régulières sont écrits de telle sorte qu'ils s'exécutent très lentement
si certaines optimisations échouent. Ces tests ont été déplacés dans 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 "Gestion de l'infini et du NaN (pas un nombre) améliorée".
Plateforme Assistance
retrouvé Plateformes
Les plates-formes IRIX et Tru64 fonctionnent à nouveau.
Quelques échecs de « faire le test » subsistent : [perl #123977]
et [perl #123977]
pour IRIX ; [perl #125298]
, [cpan #124212]
, et [cpan #99605]
pour Tru104836.
z/OS exécutant la page de code EBCDIC 1047
Core perl fonctionne maintenant sur cette plate-forme EBCDIC. Les perls antérieurs fonctionnaient également, mais, même
bien que le support n'ait pas été officiellement retiré, les perls récents ne pouvaient pas être compilés et exécutés
bien. Perl 5.20 fonctionnerait, mais avait de nombreux bogues qui ont maintenant été corrigés. De nombreux CPAN
les modules livrés avec Perl échouent toujours aux tests, y compris "Pod::Simple". Cependant, le
la version de "Pod::Simple" actuellement sur CPAN devrait fonctionner ; il a été réglé trop tard pour
inclure dans Perl 5.22. Des travaux sont en cours pour réparer de nombreux modules CPAN encore en panne,
qui sera probablement installé sur CPAN une fois terminé, de sorte que vous n'aurez peut-être pas à
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 postes de travail de NeXT dans le
du début au milieu des années 90 ; OPENSTEP était une spécification d'API qui fournissait un
sur un système non-NeXTSTEP. Les deux sont maintenant morts depuis longtemps, donc le soutien à la construction
Perl sur eux a été supprimé.
Spécifique à la plateforme Remarques
EBCDIC
Un traitement spécial est requis de la part de l'interpréteur perl sur les plates-formes EBCDIC pour obtenir
"qr/[ij]/" pour ne faire correspondre que "i" et "j", puisqu'il y a 7 caractères entre le code
points pour "i" et "j". Ce traitement spécial n'avait été invoqué que lorsque les deux extrémités de
la plage sont des littéraux. Maintenant, il est également invoqué si l'un des formulaires "\N{...}" pour
spécifier un caractère par nom ou point de code Unicode est utilisé à 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 de la génération d'un sous-processus sans attendre, la valeur de retour est désormais la bonne
PID
· Correction d'un prototype pour que la liaison n'échoue pas sous le compilateur VMS C++.
· La détection "finite", "finitel" et "isfinite" a été ajoutée à "configure.com",
la gestion de l'environnement a eu quelques modifications mineures et un correctif pour la fonctionnalité héritée
vérification de l'état.
Win32
· miniperl.exe est maintenant construit avec "-fno-strict-aliasing", permettant aux versions 64 bits de
complet sur GCC 4.8. [perl #123976]
· "nmake minitest" fonctionne maintenant sur Win32. En raison de problèmes de dépendance, vous devez créer
"nmake test-prep" en premier, et un petit nombre de tests échoue. [perl #123394]
· Perl peut maintenant être construit en mode C++ sur Windows en définissant la macro makefile
"USE_CPLUSPLUS" à la valeur "define".
· La forme de liste de piped open a été implémentée pour Win32. Remarque : contrairement au "système
LIST" cela ne revient pas au shell. [perl #121159]
· Nouvelles options de configuration "DebugSymbols" et "DebugFull" ajoutées à Windows
makefiles.
· Auparavant, compilation des modules XS (y compris ceux du CPAN) à l'aide de Visual C++ pour Win64
a entraîné une dizaine d'avertissements par fichier de hv_func.h. Ces avertissements ont
été réduit au silence.
· La prise en charge de la construction sans PerlIO a été supprimée des makefiles de Windows.
Les versions non PerlIO étaient toutes obsolètes dans Perl 5.18.0 et ne le sont déjà pas
accompagnés par Configurez sur les systèmes POSIX.
· Entre 2 et 6 millisecondes et sept appels d'E/S ont été enregistrés par tentative de
ouvrez un module perl pour chaque chemin dans @INC.
· Les versions Intel C sont désormais toujours construites avec le mode C99 activé.
· %I64d est maintenant utilisé au lieu de %lld pour MinGW.
· Dans la couche expérimentale ":win32", un plantage dans "open" a été corrigé. Ouverture aussi
/ dev / null (qui fonctionne sous la couche par défaut ":unix" de Win32 Perl) a été implémentée
pour ":win32". [perl #122224]
· Une nouvelle option de makefile, "USE_LONG_DOUBLE", a été ajoutée au dmake de Windows
makefile pour les builds gcc uniquement. Définissez ceci sur "define" si vous voulez que perl utilise long
double pour donner plus de précision et de plage pour les nombres à virgule flottante.
OpenBSD
Sur OpenBSD, Perl utilisera désormais par défaut le système "malloc" en raison de la sécurité
fonctionnalités qu'il fournit. Le wrapper malloc de Perl est utilisé depuis la v5.14 en raison de
des raisons de performances, mais le projet OpenBSD pense que le compromis en vaut la peine et
préféreraient que les utilisateurs qui ont besoin de la vitesse le demandent spécifiquement.
[perl #122000] .
Solaris
· Nous recherchons maintenant le compilateur Sun Studio dans les deux /opt/solstudio* et
/opt/solarisstudio*.
· Les constructions sur Solaris 10 avec "-Dusedtrace" échoueraient tôt car make ne suivait pas
dépendances implicites pour construire "perldtrace.h". Ajout d'une dépendance explicite à
"dépendre". [perl #120120]
· Les options C99 ont été nettoyées ; les indices 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érateurs de l'optree de localiser leur parent,
si seulement. Ceci est activé par l'option de construction non par défaut "-DPERL_OP_PARENT". Il est
prévu que cela deviendra éventuellement activé par défaut, donc le code XS qui
accède directement au champ "op_sibling" des opérations 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 drapeau, "op_moresib", 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, qu'il utilise "PERL_OP_PARENT" ou non, un
nombre de nouvelles macros et fonctions ont été ajoutées et devraient être utilisées, plutôt que
manipulant directement "op_sibling".
Dans le cas de la simple lecture de "op_sibling" pour déterminer le prochain frère, deux nouveaux
des macros ont été ajoutées. Un simple balayage à travers une chaîne sœur comme celle-ci :
for (; kid->op_sibling; kid = kid->op_sibling) { ... }
doit maintenant s'écrire :
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 le Perl
fonction "splice ()", elle vous permet de supprimer zéro ou plusieurs opérations d'une chaîne sœur
et remplacez-les par zéro ou plusieurs nouvelles opérations. Il gère de manière transparente toutes les mises à jour
des pointeurs frères, 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 un bas niveau
moyen portable de définir "op_sibling" / "op_sibparent" tout en mettant à jour "op_moresib".
Le premier définit le pointeur de frère sur un nouveau frère, le second fait de l'op le dernier
frère et sœur, et le troisième effectue conditionnellement la première ou la deuxième action. Noter que
contrairement à "op_sibling_splice()", ces macros ne maintiendront pas la cohérence dans le parent à
le 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
été ajouté. La fonction C n'existe que sous les builds "PERL_OP_PARENT" (l'utiliser est
erreur de construction sur les perls vanilla). "B::OP::parent()" existe toujours, mais sur un vanilla
build il renvoie toujours "NULL". Sous "PERL_OP_PARENT", ils renvoient le parent du
op en cours, 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 en 5.21.2, mais l'interface a été considérablement modifiée
en 5.21.11. Si vous avez mis à jour votre code avant les modifications 5.21.11, cela peut nécessiter
nouvelle révision. Les principaux changements après 5.21.2 étaient :
· 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 maintenant un argument "parent" nul où le
l'épissage n'affecte pas la première ou la dernière opération de la chaîne fraternelle
· Des macros ont été créées pour permettre au code XS de mieux manipuler la locale 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 le
références faibles, le cas échéant, qui pointent vers une SV.
· La fonction "screaminstr()" a été supprimée. Bien que marqué comme API publique, il a été
sans papiers et n'avait aucune utilisation dans les modules CPAN. L'appeler 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 « convertir » 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. Après
tout, perl ne peut pas savoir si la magie personnalisée modifiera le SV ou non. [perle
#123103] .
· L'accès à "CvPADLIST" en perlapi sur une XSUB est désormais interdit.
Le champ "CvPADLIST" a été réutilisé dans un but interne différent pour les XSUB. Alors
en particulier, vous ne pouvez plus compter sur le fait qu'il est NULL pour tester si un CV est un
XSUB. Utilisez "CvISXSUB()" à la place.
· Les SV de type "SVt_NV" sont désormais parfois sans corps lorsque la configuration de construction et
la plate-forme le permet : en particulier, lorsque "sizeof(NV) <= sizeof(IV)". « sans corps » signifie
que la valeur NV est stockée directement dans la tête d'un SV, sans nécessiter de
organisme distinct à allouer. Cette astuce a déjà été utilisée pour les IV depuis la 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 maintenant set- et get-magic qui
stocke leurs valeurs sous forme de IV, et ces IV sont utilisés lors du test de leurs valeurs dans
"pp_dbstate()". Cela empêche perl de se reproduire indéfiniment si un objet surchargé
est affecté à 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 le
Macro "EXTEND_MORTAL" pour pré-étendre la pile mortelle.
· Les composants internes de Perl ne définissent plus ou n'utilisent plus le drapeau "SVs_PADMY". "SvPADMY()" renvoie maintenant
une vraie valeur pour tout ce qui n'est pas marqué "PADTMP" et "SVs_PADMY" est maintenant définie comme 0.
· Les macros "SETsv" et "SETsvUN" ont été supprimées. Ils n'étaient plus utilisés 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 le futur
travailler sur vtables.
· La fonction "sv_catpvn_flags()" accepte les drapeaux "SV_CATBYTES" et "SV_CATUTF8", qui
spécifiez si la chaîne ajoutée est bytes ou UTF-8, respectivement. (Ces drapeaux ont
sont en fait 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. Il contient des informations utilisées à
runtime pour améliorer les performances des appels de méthode classe/objet.
"OP_METHOD" et "OP_METHOD_NAMED" sont passés de "UNOP/SVOP" à
"MÉTHODE".
· "cv_name()" est une nouvelle fonction API qui peut être transmise à un CV ou à un GV. Il renvoie un SV
contenant le nom du sous-programme, à utiliser dans les diagnostics.
[perle #116735] [perle #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
checker nécessite un GV complet pour rapporter le nom du sous-programme, ou s'il pourrait être
passé un CV à la place. Quelle que soit la valeur transmise, elle sera acceptable pour "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. [perle #116735]
· "CvGV" (qui ne fait pas partie de l'API) est maintenant une macro plus complexe, qui peut appeler un
fonctionner et réifier un GV. Pour les cas où il a été utilisé comme booléen,
"CvHASGV" a été ajouté, ce qui retournera vrai pour les CV qui ont théoriquement des GV, mais
sans réifier le GV. "CvGV" renvoie également un GV maintenant pour les sous-titres lexicaux. [perle
#120441]
· La fonction "sync_locale" dans perlapi a été ajoutée à l'API publique. Changer le
les paramètres régionaux du programme doivent être évités par le code XS. Néanmoins, certains non-Perl
les bibliothèques appelées depuis XS doivent le faire, telles que "Gtk". Lorsque cela se produit, Perl a besoin
se faire dire que les paramètres régionaux ont changé. Utilisez cette fonction pour le faire, avant de retourner
à Perle.
· Les définitions et les étiquettes pour les drapeaux dans le champ "op_private" des OP sont maintenant auto-
généré à partir de données dans regen/op_private. L'effet notable de ceci est que certains
de la sortie d'indicateur de "Concise" peut différer légèrement, et la sortie d'indicateur de
"perl -Dx" peut différer considérablement (ils utilisent tous les deux le même ensemble d'étiquettes maintenant). Aussi,
les versions de débogage ont maintenant une nouvelle assertion dans "op_free()" pour s'assurer que l'op ne le fait pas
avoir des drapeaux 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 locale "LC_NUMERIC" définie sur "C" sauf autour
les opérations qui en ont besoin doivent être définies sur les paramètres régionaux sous-jacents du programme. Cela protège
les nombreux modules XS qui ne peuvent pas gérer le fait que le caractère de base décimale n'est pas un point.
Avant cette version, Perl initialisait cette catégorie à "C", mais un appel à
"POSIX::setlocale()" le changerait. Maintenant, un tel appel changera le sous-jacent
locale de la catégorie "LC_NUMERIC" pour le programme, mais la locale exposée au code XS
restera "C". Il existe de nouvelles macros pour manipuler les paramètres régionaux LC_NUMERIC, y compris
"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 bien formé encodé en UTF-8.
· Les fonctions d'API privées suivantes ont vu leur paramètre de contexte supprimé :
"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()", restent inchangés.
· Les types "PADNAME" et "PADNAMELIST" sont désormais des types distincts, et non 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 effectivement déjà le cas, mais toute prise en charge de deux
les représentations internes des noms de pads ont maintenant été supprimées.
· Une nouvelle classe op, "UNOP_AUX", a été ajoutée. Il s'agit d'une sous-classe de "UNOP" avec un
Champ "op_aux" ajouté, qui pointe vers un tableau d'unions d'UV, SV* etc. Il est
destiné à l'endroit où un op a besoin de stocker plus de données qu'un simple "op_sv" ou autre.
Actuellement, la seule op de ce type est "OP_MULTIDEREF" (voir article 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 variable constante ou simple. Par exemple le
expression $a[0]{$k}[$i], qui impliquait auparavant dix "rv2Xv", "Xelem", "gvsv" et
Les opérations "const" sont désormais effectuées par une seule opération "multideref". Il peut également gérer "local",
"existe" et "supprimer". Une expression d'index non simple, telle que "[$i+1]" est toujours effectuée
en utilisant "aelem"/"helem", et la recherche de tableau à un seul niveau avec un petit index constant est
encore fait en utilisant "aelemfast".
Sélectionné Punaise Correctifs
· « fermer » définit maintenant $ !
Lorsqu'une erreur d'E/S se produit, le fait qu'il y ait eu une erreur est enregistré dans le
manipuler. "close" renvoie false pour un tel handle. Auparavant, la valeur de $! voudrais
ne pas être touché par "fermer", donc la convention courante d'écrire "fermer $fh ou mourir $!" fait
ne fonctionne pas de manière fiable. Maintenant, le handle enregistre également la valeur de $! et "ferme" les restaurations
le
· "no re" peut maintenant désactiver tout ce que "use re" permet
Auparavant, exécuter "no re" ne désactivait que quelques éléments. Maintenant, il peut tout éteindre
les choses activées. 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 rembourrage sur les doubles builds longs x86.
Sous certaines options de construction sur GCC 4.8 et versions ultérieures, ils avaient l'habitude d'écraser le zéro-
remplissage initialisé ou contourner entièrement le tampon initialisé. Cela a causé op/pack.t
échouer. [perl #123971]
· L'extension d'un tableau cloné à partir d'un thread parent peut entraîner la « Modification d'un
valeur en lecture seule tenté" erreurs lors de la tentative de modification des nouveaux éléments. [perl
#124127]
· Un échec d'assertion suivi d'un crash avec "*x= " a été corrigé. [perl
#123790]
· Un éventuel bogue de plantage/boucle lié à la compilation de sous-titres lexicaux a été corrigé.
[perle #124099]
· UTF-8 fonctionne désormais correctement dans les noms de fonction, dans les terminateurs de document HERE sans guillemets,
et dans les noms de variables utilisés comme index de tableau. [perl #124113]
· Des correspondances répétées de modèles globaux dans un contexte scalaire sur de grandes chaînes entachées ont été
exponentiellement lent en fonction de la position de correspondance actuelle dans la chaîne. [perle
#123202]
· Divers plantages dus à la confusion de l'analyseur par des erreurs de syntaxe ont été corrigés.
[perle #123801] [perle #123801]
[perl #123802]
[perl #123955]
· "Split" dans la portée du lexique $_ a été corrigé pour ne pas échouer les assertions. [perle
#123763]
· La syntaxe "my $x : attr" à l'intérieur de divers opérateurs de liste n'échoue plus dans les assertions. [perle
#123817]
· Un signe "@" entre guillemets suivi d'un chiffre non ASCII (qui n'est pas un identifiant valide)
ferait planter l'analyseur, au lieu d'essayer simplement le "@" comme littéral. Cette
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.) Il a été corrigé
pour retourner "undef". [perl #124004]
· Plusieurs cas de données utilisées pour stocker le contenu des variables d'environnement dans le code C principal étant
potentiellement écrasés avant d'être utilisés ont été corrigés. [perle #123748]
· Certains modèles commençant par "/.*..../" comparés aux longues chaînes ont été lents
depuis v5.8, et certains sous la forme "/.*..../i" sont lents depuis la v5.18. Ils sont maintenant
tout vite à nouveau. [perl #123743] .
· La valeur visible d'origine de $/ est maintenant conservée lorsqu'elle est définie sur une valeur non valide.
Auparavant, si vous affectiez à $/ 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
ressembler à une classe POSIX n'est pas à l'intérieur d'une classe entre crochets. Cet avertissement n'était pas
généré lorsque la classe POSIX a été annulée : "[:^ascii:]". Ceci est maintenant corrigé.
· Perl 5.14.0 a introduit un bogue par lequel « eval { ÉTIQUETTE : } » s'écraserait. Cela a été
fixé. [perl #123652] .
· Divers plantages dus à la confusion de l'analyseur par des erreurs de syntaxe ont été corrigés.
[perl #123617] . [perl #123617]
. [perl #123737]
. [perl #123753]
.
· Code comme "/$a[/" utilisé pour lire la ligne d'entrée suivante et la traiter comme si elle venait
immédiatement après la parenthèse d'ouverture. Un code invalide par conséquent analyserait et
run, mais certains codes provoquaient des plantages, c'est donc maintenant interdit. [perl #123712]
.
· Corrigez le dépassement de capacité d'argument pour le « paquet ». [perl #123874]
.
· Correction de la manipulation de "\x{}" non strict. Maintenant "\x{}" est équivalent à "\x{0}" au lieu de
faute.
· "stat -t" n'est plus traité comme empilable, tout comme "-t stat". [perl #123816]
.
· Ce qui suit ne provoque plus de SEGV : "qr{x+(y(?0))*}".
· Boucle infinie fixe dans l'analyse des backrefs dans les modèles d'expression régulière.
· Plusieurs corrections de bugs mineurs dans le comportement d'Infinity et NaN, y compris des avertissements lorsque
chaîner des chaînes de type Infinity ou NaN. Par exemple, "NaNcy" ne numifie pas à
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é réparé. Cela s'est produit uniquement dans les modèles compilés avec "/i" tout en prenant en
compte les paramètres régionaux POSIX actuels (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 pour correspondre. [perl #123539] .
· "s///g" fonctionne désormais sur des chaînes très longues (où il y en 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 le lexical $_ dans la portée, pourraient tous deux
faire une mauvaise écriture après la fin de la pile. Ils ont tous deux été corrigés pour étendre la
pile en premier.
· "prototype()" sans arguments utilisés pour lire l'élément précédent sur la pile, donc
"print "foo", prototype()" imprime le prototype de foo. Il a été corrigé pour déduire $_
plutôt. [perl #123514] .
· Certains cas de subs d'états lexicaux déclarés à l'intérieur de subs prédéclarés pourraient planter, par
exemple lors de l'évaluation d'une chaîne incluant le nom d'une variable externe, mais plus
faire.
· Certains cas de sous-titres d'états lexicaux imbriqués dans des sous-titres anonymes pourraient provoquer 'Bizarre
des erreurs de copie ou peut-être même des plantages.
· Lorsque vous essayez d'émettre des avertissements, le débogueur par défaut de perl (perl5db.pl) était parfois
donnant 'Sous-programme non défini &DB :: db_warn appelé' à la place. Ce bug, qui a commencé à
se produisent dans Perl 5.18, a été corrigé. [perle #123553]
.
· Certaines erreurs de syntaxe dans les substitutions, telles que "s/${<>{})//", plantaient et avaient
fait depuis Perl 5.10. (Dans certains cas, le crash n'a commencé à se produire qu'à partir du 5.16).
Le crash a bien sûr été corrigé. [perl #123542]
.
· Correction de quelques débordements de calcul de taille de croissance de chaîne ; en particulier, une répétition
une expression telle que "33 x ~3" pourrait provoquer un important débordement de la mémoire tampon depuis la nouvelle sortie
la taille du tampon n'était pas correctement gérée par "SvGROW()". Une expression comme celle-ci maintenant
produit correctement une panique d'enveloppe de mémoire. [perle #123554]
.
· "ligne de formulaire("@...", "a");" s'écraserait. Le cas "FF_CHECKNL" dans "pp_formline()" n'a 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()" fixent maintenant $ ! lorsqu'ils échouent en raison de la transmission d'un dossier fermé
manipuler. [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 d'opérations profondément récursif. [perle #108276]
.
· Dans Perl 5.20.0, $^N avait accidentellement désactivé le drapeau UTF-8 interne en cas d'accès
à partir d'un bloc de code dans une expression régulière, encodant effectivement 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 maintenant meilleur pour assigner la bonne ligne
numéro à cette déclaration. [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 causé un bogue, empêchant cette affectation de
utilisé dans le contexte lvalue. Donc "(@a=split//,"foo")=bar()" était une erreur. (Ce bogue
remonte probablement à Perl 3, lorsque l'optimisation a été ajoutée.) Il a maintenant été corrigé.
[perl #123057] .
· Lorsqu'une liste d'arguments échoue aux vérifications spécifiées par une signature de sous-programme (qui est
encore une fonctionnalité expérimentale), les messages d'erreur résultants donnent maintenant le fichier et
numéro de ligne de l'appelant, pas du sous-programme appelé. [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 où le sous-titre englobant a été appelé
récursivement), contrairement à la documentation. Maintenant, chaque fermeture a un état interne
pour chaque bascule. [perl #122829]
.
· L'opérateur de bascule ("".." dans un contexte scalaire) renverrait le même scalaire chaque
time, à moins que le sous-programme contenant n'ait été appelé de manière récursive. Maintenant ça revient toujours
un nouveau scalaire. [perl #122829] .
· "use", "no", les étiquettes d'instruction, les blocs spéciaux ("BEGIN") et le pod 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) retournant un handle, et entre "${...}", "@{...}", etc. [perl #122782]
.
· L'opérateur de répétition "x" propage maintenant le contexte lvalue à son argument de gauche
lorsqu'il est utilisé dans des contextes comme "foreach". Cela permet à "for(($#that_array)x2) { ... }" de
fonctionner 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 "x" surcharge, 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. Certain
les opérateurs du côté droit ne parviendraient parfois pas à attribuer la valeur du tout ou
attribuer la mauvaise valeur, ou appellerait STORE deux fois ou pas du tout sur les variables liées.
Les opérateurs affecté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
affectation due à l'utilisation de "lié", "valeurs" ou "chacun". Le résultat serait le mauvais
valeur attribuée.
· "setpgrp($nonzero)" (avec un argument) a été accidentellement changé en 5.16 pour signifier
setpgrp(0). Cela a été corrigé.
· "__SUB__" pourrait retourner la mauvaise valeur ou même corrompre la mémoire sous le débogueur (le
commutateur "-d") et dans les sous-titres 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, bien que Perl optimise toujours la copie dans les cas
où cela ne ferait aucune différence observable.
· "my sub f () { $var }" et "sub () : attr { $var }" ne sont plus éligibles pour
inlining. Le premier s'effondrerait; ce dernier jetterait simplement les attributs.
Une exception est faite pour l'attribut peu connu ":method", qui ne fait rien
beaucoup.
· L'alignement des sous-marins avec un prototype vide est désormais plus cohérent qu'auparavant.
Auparavant, un sub avec plusieurs instructions, dont toutes sauf la dernière étaient optimisées
loin, ne serait inlinable que s'il s'agissait d'un sous-marin anonyme contenant une chaîne "eval"
ou déclaration "d'état" ou fermeture sur une variable lexicale externe (ou tout sous-titre anonyme
sous le débogueur). Maintenant, tout sous-marin qui est plié en une seule constante après
les instructions optimisées sont éligibles pour l'inlining. Cela s'applique aux choses
comme "sub () { jabber() si DEBUG; 42 }".
Certains sous-programmes avec un « retour » explicite étaient rendus inlinables, contrairement au
documentation, maintenant "return" empêche toujours l'inlining.
· Sur certains systèmes, tels que VMS, « crypt » peut renvoyer une chaîne non ASCII. Si un scalaire
attribué à avait contenu une chaîne UTF-8 auparavant, alors "crypt" ne s'éteindrait pas
le drapeau UTF-8, corrompant ainsi la valeur de retour. Cela arriverait 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 guillemet ("qq[${ <
"/(?{ <
· "index()" et "rindex()" ne se bloquent plus lorsqu'ils sont utilisés sur des chaînes de plus de 2 Go. [perle
#121562] .
· Une petite fuite de mémoire auparavant intentionnelle dans "PERL_SYS_INIT"/"PERL_SYS_INIT3" sur
Les versions Win32 ont été corrigées. Cela pourrait affecter les incrustations qui créent et détruisent à plusieurs reprises
moteurs perl dans le même processus.
· "POSIX::localeconv()" renvoie désormais les données de la locale sous-jacente du programme même
lorsqu'il est appelé en dehors de la portée de "use locale".
· "POSIX::localeconv()" fonctionne désormais correctement sur les plates-formes qui n'ont pas "LC_NUMERIC"
et/ou "LC_MONETARY", ou pour lequel Perl a été compilé pour ignorer l'un ou les deux
de ces catégories locales. Dans de telles circonstances, il n'y a plus d'entrées pour le
valeurs correspondantes dans le hachage renvoyé par "localeconv()".
· "POSIX::localeconv()" marque maintenant 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 être
codé en UTF-8.
· Sur Microsoft Windows, dans le cadre de "use locale", le caractère POSIX suivant
classes ont donné des résultats pour de nombreuses locales non conformes à la norme POSIX :
"[[:alnum:]]", "[[:alpha:]]", "[[:blank:]]", "[[:digit:]]", "[[:graph:]]",
"[[:lower:]]", "[[:print:]]", "[[:punct:]]", "[[:upper:]]", "[[:word:]]", et
"[[:xchiffre :]]". En effet, l'implémentation Microsoft sous-jacente ne
suivre la norme. Perl prend maintenant des précautions particulières pour corriger cela.
· De nombreux problèmes ont été détectés par Coverityhttp://www.coverity.com/> et fixe.
· "system()" et les amis devraient maintenant fonctionner correctement sur plus de versions Android.
En raison d'un oubli, la valeur spécifiée via "-Dtargetsh" à Configurez Ça pourrait finir
jusqu'à être ignoré par une partie du processus de construction. Cela a causé la compilation croisée de perls pour
Android pour se retrouver avec des versions défectueuses de "system()", "exec()" et backticks : le
les commandes finiraient par chercher "/ Bin / sh" au lieu de "/system/bin/sh", et il en serait de même
échouent pour la grande majorité des appareils, laissant $! comme "ENOENT".
· "qr(...\(...\)...)", "qr[...\[...\]...]", et "qr{...\{.. .\}...}" maintenant, travaille.
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ù, sinon, ils seraient considérés
métacaractères, et le délimiteur d'ouverture de modèle était le caractère, et la fermeture
délimiteur était son caractère miroir.
· "s///e" sur les chaînes UTF-8 entachées corrompues "pos()". Ce bogue, introduit en 5.20, est
maintenant corrigé. [perle #122148] .
· Une limite autre qu'un mot dans une expression régulière ("\B") ne correspondait pas toujours à la fin du
chaîne de caractères; en particulier "q{} =~ /\B/" ne correspond pas. Ce bogue, introduit dans perl 5.14,
est maintenant corrigé. [perl #122090] .
· "" P" =~ /(?=.*P)P/" devrait correspondre, mais ne l'a pas fait. C'est maintenant corrigé. [perl #122171]
.
· Ne pas compiler "use Foo" dans un "eval" pourrait laisser un faux sous-programme "BEGIN"
définition, qui produirait un avertissement "Subroutine BEGIN redefined" lors de la prochaine utilisation
de "use", ou autre bloc "BEGIN". [perl #122107]
.
· La syntaxe "method { BLOCK } ARGS" analyse désormais correctement les arguments s'ils commencent par
une accolade ouvrante. [perle #46947] .
· Les bibliothèques externes et Perl peuvent avoir des idées différentes sur ce qu'est la locale. C'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 de typeglob. Auparavant le
glob a été stringifié et son nom a été recherché. Maintenant, le glob lui-même est utilisé. [perle
#69456]
· Lors de l'analyse d'un sigil ("$" "@" "%" "&)" suivi d'accolades, l'analyseur n'essaie plus
pour deviner s'il s'agit d'un bloc ou d'un constructeur de hachage (provoquant une erreur de syntaxe lorsqu'il
devine ce dernier), puisqu'il ne peut s'agir que d'un bloc.
· "undef $reference" libère maintenant le référent immédiatement, au lieu de s'y accrocher
jusqu'à la prochaine déclaration. [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 maintenant d'éviter de vivifier les paquets s'il s'avère que le mot nu est
ne va pas être un nom de sous-programme.
· Compilation de constantes anonymes (par exemple, "sub () { 3 }") ne supprime plus aucun
sous-programme nommé "__ANON__" dans le package actuel. Non seulement "*__ANON__{CODE}"
effacé, mais il y avait aussi une fuite de mémoire. Ce bogue remonte à Perl 5.8.0.
· Les déclarations de stub comme "sub f;" et "sous f ();" n'efface 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 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ères, mais maintenant une gestion spéciale a été ajoutée afin qu'ils puissent correspondre aux noms
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 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 tout 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
donnant à la poignée le bon nombre de références, de sorte qu'un double free pourrait se produire.
· Lorsqu'il décidait qu'un mot nu était un nom de méthode, l'analyseur deviendrait confus si un
"notre" sous-marin portant le même nom existait et recherchez la méthode dans le package du
"notre" sub, au lieu du package de l'appelant.
· L'analyseur syntaxique n'est plus confondu par "\U=" dans une chaîne entre guillemets doubles. Il avait l'habitude de
produit une erreur de syntaxe, mais le compile maintenant correctement. [perle #80368]
· L'intention des opérateurs de test de fichiers "-B" et "-T" a toujours été de traiter
Fichiers encodés en UTF-8 sous forme de texte. (perlfunc a été mis à jour pour dire cela.) Auparavant, il
Il était possible que certains fichiers soient considérés comme UTF-8 alors qu'ils n'étaient pas en fait un UTF-8 valide.
C'est maintenant corrigé. Les opérateurs travaillent désormais également sur les plateformes EBCDIC.
· Dans certaines conditions, des messages d'avertissement sont affichés pendant le modèle d'expression régulière
compilation étaient sortis plus d'une fois. Cela a maintenant été corrigé.
· Perl 5.20.0 a introduit une régression dans laquelle une expression régulière encodée en UTF-8
modèle qui contient une seule lettre minuscule ASCII ne correspond pas à sa majuscule
homologue. Cela 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 ("utilisez
avertissements" ou "pas d'avertissements") n'étaient pas en vigueur et $^W était faux au moment de la compilation et
vrai au moment de l'exécution.
· Le chargement de tables Unicode lors d'une correspondance d'expression régulière peut entraîner une assertion
échecs sous les versions de débogage si le match précédent utilisait le même régulier
expression. [perl #122747]
· Le clonage de thread ne fonctionnait pas correctement pour les sous-titres lexicaux, provoquant éventuellement des plantages ou
double libère à la sortie.
· Depuis Perl 5.14.0, en supprimant $SomePackage::{__ANON__} puis en annulant 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
donnant des données absurdes. Cela a été corrigé.
· "(appelant $n)[3]" rapporte maintenant les noms des sous-titres lexicaux, au lieu de les traiter comme
"(inconnue)".
· La "liste de sous-noms de tri" prend désormais en charge l'utilisation d'un sous-marin lexical comme routine de comparaison.
· Crénelage (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é, provoquant l'attribution de valeurs erronées.
[perle #15667]
· De longs terminateurs here-doc pourraient provoquer une mauvaise lecture sur de courtes lignes d'entrée. Cela a
été fixé. Il est douteux qu'un accident ait pu se produire. Ce bug remonte à
quand here-docs a été introduit dans Perl 3.000 il y a vingt-cinq ans.
· Une optimisation en "split" pour traiter "split /^/" comme "split /^/m" avait le regrettable
effet secondaire de traiter également "split /\A/" comme "split /^/m", ce qu'il ne devrait pas.
Cela a été corrigé. (Notez cependant que "split /^x/" ne se comporte pas comme
"split /^x/m", qui est également considéré comme un bogue et sera corrigé dans un futur
version.) [perl #122761]
· La syntaxe peu connue "my Class $var" (voir champs et attributs) pourrait être confuse
dans le cadre de "use utf8" si "Class" é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'a plus
aucun effet sur les valeurs qui étaient en lecture seule au départ. Auparavant, le déverrouillage de tels
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
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 comprenant des blocs de code avec des erreurs de syntaxe, tels que "/ (?{(^{})/",
bloquer ou échouer les assertions sur les versions de débogage. Maintenant, ils produisent 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 inutiles.
· Dans "() = @array = split", le "() =" au début ne confond plus l'optimiseur
en supposant une limite de 1.
· Les avertissements fatals n'empêchent plus la sortie d'erreurs de syntaxe. [perle #122966]
.
· Correction d'une erreur de conversion NaN double-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 de manière incorrecte certains fichiers.
[perl #122820] .
· AIX définit désormais correctement la longueur dans "getsockopt". [perle #120835]
. [cpan #120835]
. [cpan #91183]
.
· La phase d'optimisation d'une compilation d'expressions rationnelles pourrait s'exécuter « pour toujours » et épuiser tout
mémoire dans certaines circonstances; maintenant fixé. [perl #122283]
.
· Le script de test t/op/crypt.t utilise maintenant l'algorithme SHA-256 si celui par défaut est
désactivé, plutôt que de donner des échecs. [perle #121591]
.
· Correction d'une erreur off-by-one lors de la définition de la taille d'un tableau partagé. [perl #122950]
.
· Correction d'un bogue qui pouvait amener perl à entrer dans une boucle infinie lors de la compilation. Dans
particulier, un tout en(1) au sein d'une sous-liste, par exemple
sub foo { () = ($a, mon $b, ($c, do { tout en(1) {} })) }
Le bogue a été introduit en 5.20.0 [perl #122995]
.
· Sur Win32, si une variable a été "localisée" dans un pseudo-processus qui a ensuite bifurqué,
la restauration de la valeur d'origine dans le pseudo-processus enfant a provoqué une corruption de la mémoire et
un plantage du pseudo-processus enfant (et donc du processus du système d'exploitation). [perl #40565]
.
· Appeler "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 fichier indésirable lorsqu'ils apparaissent par erreur
des messages.
· Le prototype de sous-programme "\@" 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. [perle #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 des listes en dehors du bloc ou l'écrasement d'éléments. Cette
pourrait arriver avec "map { for(...){...} } ..." et avec des listes contenant "do {
pour (...){...} }". [perl #123286] .
· "scalar()" propage maintenant le contexte lvalue, de sorte que "for(scalar($#foo)) { ... }" peut
modifier $#foo à $_.
· "qr/@array(?{block})/" ne meurt plus avec "Copie bizarre de ARRAY". [perle #123344]
.
· "eval '$variable'" dans les sous-programmes nommés imbriqués recherchait parfois un global
variable même avec une variable lexicale dans la portée.
· En perl 5.20.0, "sort CORE::fake" où 'fake' est autre chose qu'un mot-clé,
a 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 "use utf8", une variable lexicale Latin-1 à un seul caractère est interdite. le
le message d'erreur correspondant, "Can't use global $foo...", donnait des ordures 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 échouer une assertion). Maintenant, "${^LAST_FH}" se retrouve 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-marin actuel a été appelé. [perl #123020]
.
Connu Problèmes
· "pack"-ing un NaN sur un perl compilé avec Visual C 6 ne se comporte pas correctement, conduisant
à un échec de test dans t/op/infnan.t. [perl125203]
· Un objectif est que Perl puisse être recompilé pour fonctionner raisonnablement bien sur n'importe quel Unicode
version. Dans Perl 5.22, cependant, la première version de ce type 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 encodé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'expressions régulières.
Ils devraient, mais ne le font pas, faire en sorte que les valeurs des plages soient toutes traitées comme
Points de code Unicode, et non natifs. ("Expressions régulières de la 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 livrés avec le noyau montrent 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::Générer la version 1.50
· B::Utils version 0.25
· Coro version 6.42
· Version danseuse 1.3130
· Données ::Alias version 1.18
· Data ::Dump ::Streamer version 2.38
· Données::Util version 0.63
· Développeur :: Spy version 0.07
· invocateur version 0.34
· Lexique :: Var version 0.009
· LWP :: ConsoleLogger version 0.000018
· Maçon version 2.22
· NgxQueue version 0.02
· Père version 1.00
· Analyser :: Mot-clé 0.08
Nécrologie
Brian McCauley est décédé le 8 mai 2015. Il était une affiche fréquente pour Usenet, Perl Monks et
d'autres forums Perl, et a fait plusieurs contributions au CPAN sous le pseudo NOBULL, y compris à
la FAQ Perl. Il a participé à presque tous les YAPC::Europe, et en fait, a aidé à organiser
YAPC::Europe 2006 et le QA Hackathon 2009. Son esprit et son plaisir dans les systèmes complexes
étaient particulièrement évidents dans son amour des jeux de société; de nombreux marchands de Perl aimeront
souvenirs de jouer à Fluxx et à d'autres jeux avec Brian. Il va nous manquer.
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 Simo~es, 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, Dimitri
Tikhonov, Doug Bell, E. Choroba, Ed J, Eric Herman, 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 (Livre),
Pierre Bogossian, Rafael Garcia-Suarez, Randy Stauner, Reini Urban, Ricardo Signes, Rob
Hoelz, Rostislav Skudnov, Sawyer X, Shirakata Kentaro, Poisson Shlomi, 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
le groupe de discussion comp.lang.perl.misc et la base de données de bogues perl sur . Là
peuvent é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