Il s'agit de la commande perl5180delta 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
perl5180delta - Quoi de neuf pour perl v5.18.0
DESCRIPTION
Ce document décrit les différences entre la version v5.16.0 et la version v5.18.0.
Si vous effectuez une mise à niveau à partir d'une version antérieure telle que v5.14.0, lisez d'abord perl5160delta,
qui décrit les différences entre la v5.14.0 et la v5.16.0.
Core Améliorations
New mécanisme pour expérimental Caractéristiques
Les fonctionnalités expérimentales nouvellement ajoutées nécessiteront désormais cette incantation :
aucun avertissement "experimental::feature_name" ;
utiliser la fonctionnalité "feature_name" ; # avertirait sans la ligne prev
Il existe une nouvelle catégorie d'avertissements, appelée "expérimental", contenant des avertissements indiquant que le
feature pragma émet lors de l'activation de fonctionnalités expérimentales.
Les fonctionnalités expérimentales nouvellement ajoutées recevront également des identifiants d'avertissement spéciaux, qui consistent en
"experimental ::" suivi du nom de la fonctionnalité. (Le plan est d'étendre ce
mécanisme éventuellement à tous les avertissements, pour leur permettre d'être activés ou désactivés
individuellement, et pas seulement par catégorie.)
En disant
aucun avertissement "experimental::feature_name" ;
vous assumez la responsabilité de tout bris qui, à l'avenir, modifiera ou supprimera le
fonction peut causer.
Étant donné que certaines fonctionnalités (comme "~~" ou "mon $_") émettent désormais des avertissements expérimentaux, et vous pouvez
voulez les désactiver dans le code qui est également exécuté sur des perls qui ne reconnaissent pas ces avertissements
catégories, envisagez d'utiliser le pragma "if" comme ceci :
non si $] >= 5.018, avertissements => "experimental::feature_name" ;
Les fonctionnalités expérimentales existantes peuvent également commencer à émettre ces avertissements. Veuillez consulter
perlexperiment pour savoir quelles fonctionnalités sont considérées comme expérimentales.
Hash réviser
Les modifications apportées à l'implémentation des hachages dans perl v5.18.0 seront l'une des plus visibles
modifications du comportement du code existant.
Par défaut, deux variables de hachage distinctes avec des clés et des valeurs identiques peuvent désormais fournir
leur contenu dans un ordre différent où il était auparavant identique.
Lorsque vous rencontrez ces changements, la clé pour les nettoyer est d'accepter que hashes
sommes-nous non ordonné collections et d'agir en conséquence.
Hash randomisation
La graine utilisée par la fonction de hachage de Perl est maintenant aléatoire. Cela signifie que l'ordre qui
les clés/valeurs seront renvoyées par des fonctions telles que "keys()", "values()" et "each()"
diffèrent d'une course à l'autre.
Ce changement a été introduit pour rendre les hachages de Perl plus robustes à la complexité algorithmique
attaques, et aussi parce que nous avons découvert qu'il expose des bogues de dépendance de commande de hachage et
facilite leur repérage.
Les mainteneurs de la chaîne d'outils pourraient vouloir investir dans une infrastructure supplémentaire pour tester des choses
comme ça. Exécuter des tests plusieurs fois de suite, puis comparer les résultats le rendra
plus facile de repérer les dépendances d'ordre de hachage dans le code. Les auteurs sont fortement encouragés à ne pas
exposer l'ordre des clés des hachages de Perl à des publics non sécurisés.
De plus, chaque hachage a son propre ordre d'itération, ce qui devrait le rendre beaucoup plus difficile
pour déterminer quelle est la graine de hachage actuelle.
New hachage fonctions
Perl v5.18 inclut la prise en charge de plusieurs fonctions de hachage et a modifié la valeur par défaut (en
ONE_AT_A_TIME_HARD), vous pouvez choisir un algorithme différent en définissant un symbole à la compilation
temps. Pour une liste à jour, consultez le INSTALLER document. Notez qu'à partir de Perl v5.18, nous
ne peut que recommander l'utilisation de la valeur par défaut ou SIPHASH. Tous les autres sont connus pour avoir
questions de sécurité et sont uniquement à des fins de recherche.
PERL_HASH_SEED convivial variable maintenant prend a hex Plus-value
"PERL_HASH_SEED" n'accepte plus un entier comme paramètre ; à la place la valeur est
devrait être une valeur binaire codée dans une chaîne hexadécimale, telle que "0xf5867c55039dc724". Cette
est de faire en sorte que l'infrastructure supporte des graines de hachage de longueurs arbitraires, qui pourraient dépasser
celui d'un entier. (SipHash utilise une graine de 16 octets.)
PERL_PERTURB_KEYS convivial variable ajoutée
La variable d'environnement "PERL_PERTURB_KEYS" permet de contrôler le niveau de
randomisation appliquée aux "clés" et aux amis.
Lorsque "PERL_PERTURB_KEYS" vaut 0, perl ne randomisera pas du tout l'ordre des clés. La chance
que les changements de "clés" dus à une insertion seront les mêmes que dans les perls précédents, essentiellement uniquement
lorsque la taille du bucket est modifiée.
Lorsque "PERL_PERTURB_KEYS" vaut 1, perl randomisera les clés de manière non répétable. le
les chances que les changements de "clés" dus à un insert soient très élevées. C'est le plus sécurisé
et le mode par défaut.
Lorsque "PERL_PERTURB_KEYS" vaut 2, perl randomisera les clés de manière reproductible. Répété
les exécutions du même programme doivent produire la même sortie à chaque fois.
"PERL_HASH_SEED" implique un paramètre "PERL_PERTURB_KEYS" autre que celui par défaut. Réglage
"PERL_HASH_SEED=0" (exactement un 0) implique "PERL_PERTURB_KEYS=0" (randomisation des clés de hachage
désactivée); définir "PERL_HASH_SEED" sur toute autre valeur implique "PERL_PERTURB_KEYS=2"
(randomisation déterministe et répétable des clés de hachage). Spécifier "PERL_PERTURB_KEYS"
explicitement à un niveau différent annule ce comportement.
Hachage ::Util ::hash_seed() maintenant Retours a un magnifique
Hachage ::Util ::hash_seed() renvoie maintenant une chaîne au lieu d'un entier. Il s'agit de faire le
l'infrastructure prend en charge des graines de hachage de longueurs arbitraires pouvant dépasser celles d'un
entier. (SipHash utilise une graine de 16 octets.)
Sortie of PERL_HASH_SEED_DEBUG a était a changé
La variable d'environnement PERL_HASH_SEED_DEBUG permet désormais à perl d'afficher à la fois la fonction de hachage
perl a été construit avec, et la graine, en hexadécimal, utilisée pour ce processus. Code analysant ceci
la sortie, si elle existe, doit changer pour s'adapter au nouveau format. Exemple du nouveau
Format:
$ PERL_HASH_SEED_DEBUG=1 ./perl -e1
HASH_FUNCTION = MURMUR3 HASH_SEED = 0x1476bb9f
Mise à niveau à Unicode 6.2
Perl prend désormais en charge Unicode 6.2. Une liste des changements par rapport à Unicode 6.1 est disponible sur
<http://www.unicode.org/versions/Unicode6.2.0>.
Personnage prénom alias Au cours de cette réunion, Matthew a obtenu de précieux conseils et Linda lui a demandé de la tenir au courant de ses progrès. maintenant comprennent gamme non-Latin1 caractères
Il est possible de définir vos propres noms de caractères à utiliser dans "\N{...}",
"charnames::vianame()", etc. Ces noms peuvent désormais être composés de caractères du
toute la gamme Unicode. Cela permet aux noms d'être dans votre langue maternelle, et pas seulement
Anglais. Certaines restrictions s'appliquent aux caractères pouvant être utilisés (vous ne pouvez pas définir
un nom qui contient une ponctuation, par exemple). Voir "ALIAS PERSONNALISÉS" dans charnames.
New DTrace sondes
Les nouvelles sondes DTrace suivantes ont été ajoutées :
· "op-entrée"
· "chargement-fichier"
· "fichier chargé"
"${^LAST_FH}"
Cette nouvelle variable donne accès au handle de fichier qui a été lu en dernier. C'est le
handle utilisé par $. et par "tell" et "eof" sans arguments.
Régulier Expression complet » Opérations
C'est un expérimental fonctionnalité pour permettre la correspondance avec l'union, l'intersection, etc.,
d'ensembles de points de code, similaire à Unicode::Regex::Set. Il peut également être utilisé pour étendre
Traitement "/x" vers des classes de caractères [entre crochets] et en remplacement de défini par l'utilisateur
propriétés, permettant des expressions plus complexes qu'eux. Voir « Étendu entre crochets
Classes de caractères" dans perlrecharclass.
Lexical sous-programmes
Cette nouvelle fonctionnalité est toujours considérée expérimental. Pour l'activer :
utiliser 5.018 ;
aucun avertissement "expérimental::lexical_subs" ;
utiliser la fonctionnalité "lexical_subs" ;
Vous pouvez désormais déclarer des sous-programmes avec "state sub foo", "my sub foo" et "our sub foo".
("state sub" nécessite que la fonctionnalité "state" soit activée, sauf si vous l'écrivez comme
"CORE ::state sub foo".)
"state sub" crée un sous-programme visible dans la portée lexicale dans laquelle il est déclaré.
Le sous-programme est partagé entre les appels au sous-programme externe.
"my sub" déclare un sous-programme lexical qui est créé chaque fois que le bloc englobant est
entré. "state sub" est généralement légèrement plus rapide que "my sub".
"our sub" déclare un alias lexical au sous-programme de paquetage du même nom.
Pour plus d'informations, voir "Sous-programmes lexicaux" dans perlsub.
Calculé Etiquettes
La boucle contrôle "next", "last" et "redo", et l'opérateur spécial "dump", permet maintenant
expressions arbitraires à utiliser pour calculer les étiquettes au moment de l'exécution. Auparavant, tout argument
qui n'était pas une constante était traitée comme une chaîne vide.
Plus COEUR:: sous-marins
Plusieurs autres fonctions intégrées ont été ajoutées en tant que sous-routines au CORE :: namespace -
à savoir, ces mots-clés non remplaçables qui peuvent être implémentés sans analyseurs personnalisés :
"defined", "delete", "exists", "glob", "pos", "prototype", "scalar", "split", "study" et
"indéfini".
Comme certains d'entre eux ont des prototypes, "prototype('CORE::...')" a été modifié pour ne pas créer de
distinction entre les mots clés remplaçables et non remplaçables. C'est pour faire
"prototype('CORE::pos')" cohérent avec "prototype(&CORE::pos)".
"tuer" avec négatif signal noms
"kill" a toujours autorisé un numéro de signal négatif, qui tue le groupe de processus à la place
d'un seul processus. Il a également autorisé les noms de signaux. Mais il ne s'est pas comporté
systématiquement, car les noms de signaux négatifs étaient traités comme 0. Désormais, les noms de signaux négatifs
comme "-INT" sont pris en charge et traités de la même manière que -2 [perl #112990].
Sécurité
See soit: hachage réviser
Certaines des modifications apportées à la refonte du hachage ont été apportées pour améliorer la sécurité. Veuillez lire cela
.
"Conservable" Sécurité avertissement in Documentation
La documentation de "Storable" comprend désormais une section qui avertit les lecteurs du danger
d'accepter des documents stockables provenant de sources non fiables. La version courte est que
la désérialisation de certains types de données peut entraîner le chargement de modules et l'exécution d'autres codes.
Il s'agit d'un comportement documenté et d'un comportement recherché, mais cela ouvre un vecteur d'attaque pour
entités malveillantes.
"Locale::Maketext" permis code injection via a malveillant modèle
Si les utilisateurs pouvaient fournir une chaîne de traduction à Locale :: Maketext, cela pourrait être utilisé pour
invoque des sous-routines Perl arbitraires disponibles dans le processus en cours.
Cela a été corrigé, mais il est toujours possible d'invoquer n'importe quelle méthode fournie par
"Locale::Maketext" lui-même ou une sous-classe que vous utilisez. L'une de ces méthodes à son tour
invoquera la sous-routine "sprintf" du noyau Perl.
En résumé, permettre aux utilisateurs de fournir des chaînes de traduction sans les auditer est une mauvaise chose.
idée.
Cette vulnérabilité est documentée dans CVE-2012-6329.
Éviter les appel jeu de mémoire avec a négatif compter
Code perl mal écrit qui permet à un attaquant de spécifier le compte de la chaîne "x" de perl
Un opérateur de répétition peut déjà provoquer une attaque par déni de service par épuisement de la mémoire. Une faille dans
les versions de perl antérieures à la v5.15.5 peuvent aggraver cela en un dépassement de tampon de tas ; associé à
versions de la glibc antérieures à la 2.16, il permet éventuellement l'exécution de code arbitraire.
La faille adressée à ce commit a reçu l'identifiant CVE-2012-5195 et a été
étudié par Tim Brown.
Incompatible Modifications
See soit: hachage réviser
Certaines des modifications apportées à la refonte du hachage ne sont pas entièrement compatibles avec les versions précédentes
de perle. Veuillez lire cette section.
An inconnu caractère prénom in "\N{...}" is maintenant a syntaxe erreur
Auparavant, il avertissait et le CARACTÈRE DE REMPLACEMENT Unicode était remplacé. Unicode maintenant
recommande que cette situation soit une erreur de syntaxe. De plus, le comportement précédent a conduit à certains
avertissements et comportements déroutants, et puisque le CARACTÈRE DE REMPLACEMENT n'a aucune utilité autre
plutôt que de remplacer un caractère inconnu, tout code qui a ce problème est bogué.
Anciennement obsolète caractères in "\N{}" caractère prénom alias sommes-nous maintenant erreurs.
Depuis la v5.12.0, il est devenu obsolète d'utiliser certains caractères dans "\N{...}" défini par l'utilisateur
noms de personnages. Ceux-ci provoquent maintenant une erreur de syntaxe. Par exemple, c'est maintenant une erreur de
commencer un nom par un chiffre, comme dans
mon $undraftable = "\N{4F}" ; # Erreur de syntaxe!
ou d'avoir des virgules n'importe où dans le nom. Voir "ALIAS PERSONNALISÉS" dans charnames.
"\N{BELL}" maintenant se réfère à U + 1F514 plutôt ; of U + 0007
Unicode 6.0 a réutilisé le nom "BELL" pour un point de code différent de celui qu'il avait traditionnellement
signifiait. Depuis Perl v5.14, l'utilisation de ce nom faisait toujours référence à U+0007, mais soulevait un
avertissement de dépréciation. Maintenant, "BELL" fait référence à U+1F514, et le nom de U+0007 est "ALERT".
Toutes les fonctions de charnames ont été mises à jour en conséquence.
New Restrictions in Multi-caractère Insensible à la casse Adapter in Régulier Expression Entre crochets
Personnage Cours
Unicode a maintenant retiré sa recommandation précédente pour les expressions régulières à
gérer automatiquement les cas où un seul caractère peut correspondre à plusieurs caractères cas-
insensiblement, par exemple, la lettre LATIN SMALL LETTER SHARP S et la séquence "ss".
En effet, il s'avère impossible de le faire correctement dans tous
conditions. Parce que Perl a essayé de le faire du mieux qu'il pouvait, il continuera à le faire
alors. (Nous envisageons une option pour le désactiver.) Cependant, une nouvelle restriction est en cours
ajouté sur ces correspondances lorsqu'elles se produisent dans des classes de caractères [entre crochets]. Les gens étaient
en spécifiant des choses telles que "/[\0-\xff]/i", et être surpris qu'il corresponde aux deux
séquence de caractères "ss" (puisque LATIN SMALL LETTER SHARP S apparaît dans cette plage). Cette
le comportement est également incompatible avec l'utilisation d'une propriété au lieu d'une plage :
"\p{Block=Latin1}" inclut également LATIN SMALL LETTER SHARP S, mais "/[\p{Block=Latin1}]/i"
ne correspond pas à "ss". La nouvelle règle est que pour qu'il y ait un cas à plusieurs caractères-
correspondance insensible dans une classe de caractères entre crochets, le caractère doit être explicitement
listé, et non comme un point final d'une plage. Cela obéit plus étroitement au principe de
Le moindre étonnement. Voir "Classes de caractères entre crochets" dans perlrecharclass. Notez qu'un
bogue [perl #89774], maintenant corrigé dans le cadre de ce changement, empêchait le comportement précédent de
travailler pleinement.
Explicite pour variable noms et Identificateurs
En raison d'un oubli, les noms de variable à caractère unique dans la v5.16 ont été complètement
libre. Cela a ouvert la porte à plusieurs sortes de folie. Depuis la v5.18, ceux-ci
suivre les règles des autres identifiants, en plus d'accepter les caractères qui correspondent à
Propriété "\p{POSIX_Punct}".
Il n'y a plus de différence dans l'analyse des identifiants spécifiés à l'aide d'accolades
versus sans accolades. Par exemple, perl autorisait "${foo:bar}" (avec un seul
deux-points) mais pas $foo:bar. Maintenant que les deux sont gérés par un seul chemin de code, ils sont tous les deux
traités de la même manière : les deux sont interdits. Notez que ce changement concerne la plage de
identificateurs littéraux autorisés, pas d'autres expressions.
Verticale onglets sommes-nous maintenant whitespace
Personne ne pouvait se rappeler pourquoi "\s" ne correspondait pas à "\cK", l'onglet vertical. Maintenant c'est le cas. Donné
l'extrême rareté de ce personnage, très peu de casse est à prévoir. Cela dit, voici
ce que cela veut dire:
"\s" dans une expression régulière correspond désormais à une tabulation verticale en toutes circonstances.
Les tabulations verticales littérales dans un littéral regex sont ignorées lorsque le modificateur "/x" est utilisé.
Les tabulations verticales en tête, seules ou mélangées à d'autres espaces, sont désormais ignorées lorsque
interpréter une chaîne comme un nombre. Par example:
$dec = " \cK \t 123";
$hex = " \cK \t 0xF" ;
dites 0 + $déc; # était 0 avec avertissement, maintenant 123
dire int $déc; # était 0, maintenant 123
dire oct $hex ; # était 0, maintenant 15
"/(?{})/" et "/(??{})/" avons était fortement retravaillé
L'implémentation de cette fonctionnalité a été presque entièrement réécrite. Bien que son
l'intention principale est de corriger des bogues, certains comportements, en particulier liés à la portée des
variables, auront changé. Ceci est décrit plus en détail dans les "correctifs de bogues sélectionnés"
.
Plus strict analyse of substitution remplacement
Il n'est plus possible d'abuser de la façon dont l'analyseur analyse "s///e" comme ceci :
%_=(_,"Juste un autre ");
$_="Hacker Perl,\n" ;
s//_}->{_/e;imprimer
"donné" maintenant alias le de défis $_
Au lieu d'attribuer à un $_ lexical implicite, "donné" fait maintenant du $_ global un alias
pour son argument, tout comme "foreach". Cependant, il utilise toujours le lexique $_ s'il y a
lexical $_ dans la portée (encore une fois, tout comme "foreach") [perl #114020].
Le manuel de formation correspondance intelligente famille of Caractéristiques sommes-nous maintenant expérimental
La correspondance intelligente, ajoutée dans la v5.10.0 et considérablement révisée dans la v5.10.1, a été un habitué
point de plainte. Bien qu'il existe un certain nombre de façons dont il est utile, il a
également avéré problématique et déroutant pour les utilisateurs et les implémenteurs de Perl. Il y a
un certain nombre de propositions sur la meilleure façon de résoudre le problème. Il est clair que
smartmatch va presque certainement changer ou disparaître à l'avenir. S'appuyer
sur son comportement actuel n'est pas recommandé.
Des avertissements seront désormais émis lorsque l'analyseur verra "~~", "donné" ou "quand". Pour désactiver
ces avertissements, vous pouvez ajouter cette ligne à la portée appropriée :
non si $] >= 5.018, avertissements => "experimental::smartmatch" ;
Envisagez cependant de remplacer l'utilisation de ces fonctionnalités, car elles peuvent à nouveau modifier le comportement.
avant de devenir stable.
Lexical $_ is maintenant expérimental
Depuis qu'il a été introduit dans Perl v5.10, il a causé beaucoup de confusion sans qu'il soit évident
Solution:
· Divers modules (par exemple, List::Util) s'attendent à ce que les routines de rappel utilisent le $_ global.
"use List::Util 'first'; my $_; first { $_ == 1 } @list" ne fonctionne pas comme on le ferait
attendre.
· Une déclaration "my $_" plus tôt dans le même fichier peut provoquer des avertissements de fermeture déroutants.
· Le caractère prototype de sous-programme "_" permet aux sous-programmes appelés d'accéder à votre
lexical $_, donc ce n'est pas vraiment privé après tout.
· Néanmoins, les sous-programmes avec un prototype "(@)" et les méthodes ne peuvent pas accéder au
$_ lexical de l'appelant, sauf s'ils sont écrits en XS.
· Mais même les routines XS ne peuvent pas accéder à un $_ lexical déclaré, pas dans l'appel
sous-programme, mais dans une portée externe, ssi ce sous-programme s'est avéré ne pas mentionner $_ ou
utilisez n'importe quel opérateur dont la valeur par défaut est $_.
Nous espérons que le $_ lexical pourra être réhabilité, mais cela peut entraîner des changements dans sa
comportement. Veuillez l'utiliser avec prudence jusqu'à ce qu'il devienne stable.
lire la ligne() avec "$/ = \N" maintenant lit N personnages, pas N octets
Auparavant, lors de la lecture d'un flux avec des couches d'E/S telles que "encoding", le lire la ligne()
fonction, également connue sous le nom d'opérateur "<>", lirait N octets à partir du plus haut
couche. [perle #79960]
Maintenant, N caractères sont lus à la place.
Il n'y a pas de changement de comportement lors de la lecture à partir de flux sans couches supplémentaires, car
les octets correspondent exactement aux caractères.
Remplacé "monde" is maintenant passé UN argument
Les remplacements "glob" étaient passés à un deuxième argument magique non documenté qui identifiait
l'appelant. Rien sur CPAN n'utilisait cela, et cela a gêné une correction de bogue, donc c'était
supprimé. Si vous avez vraiment besoin d'identifier l'appelant, consultez Devel::Callsite sur CPAN.
Ici dock analyse
Le corps d'un document ici à l'intérieur d'un opérateur de type guillemet commence désormais toujours sur la ligne
après le "<
l'opérateur de type guillemet contenant, mais ce n'était que parfois le cas [perl #114040].
Alphanumérique opérateurs doit maintenant be séparé grâce au le fermeture délimiteur of Standard expressions
Vous ne pouvez plus écrire quelque chose comme :
m/a/et 1
Au lieu de cela, vous devez écrire
m/a/ et 1
avec un espace blanc séparant l'opérateur du délimiteur de fermeture du régulier
expression. Ne pas avoir d'espace blanc a entraîné un avertissement de dépréciation depuis Perl
v5.14.0.
qw (...) Vous pouvez aucune plus long be d'utiliser as parenthèses
"qw" listes utilisées pour tromper l'analyseur en lui faisant croire qu'ils étaient toujours entourés de
parenthèses. Cela a permis des constructions surprenantes telles que "foreach $x qw(abc)
{...}", qui devrait en réalité s'écrire "foreach $x (qw(abc)) {...}".
parfois mettre le lexer dans le mauvais état, donc ils ne fonctionnent pas complètement, et le même
"foreach qw(abc) {...}" que l'on pourrait s'attendre à être autorisé n'a jamais fonctionné du tout.
Cet effet secondaire de "qw" a maintenant été aboli. Il est obsolète depuis Perl
v5.13.11. Il faut maintenant utiliser de vraies parenthèses partout où la grammaire appelle
pour eux.
Interaction of lexical et défaut avertissements
Activer tous les avertissements lexicaux utilisés en premier pour désactiver tous les avertissements par défaut s'ils sont lexicaux
les avertissements n'étaient pas déjà activés :
$* ; # avertissement d'obsolescence
utiliser les avertissements "void" ;
$# ; # avertissement vide ; pas d'avertissement de dépréciation
Désormais, les catégories d'avertissements "debugging", "deprecated", "glob", "inplace" et "malloc" sont
laissé allumé lors de l'activation des avertissements lexicaux (à moins qu'ils ne soient désactivés par "pas d'avertissements", de
cours).
Cela peut entraîner l'apparition d'avertissements d'obsolescence dans un code qui était auparavant exempt d'avertissements.
Ce sont les seules catégories composées uniquement d'avertissements par défaut. Avertissements par défaut dans
d'autres catégories sont toujours désactivées par "utiliser les avertissements "catégorie"", car nous n'avons pas encore
l'infrastructure de contrôle des alertes individuelles.
"Etat sous" et "notre sous"
En raison d'un accident de l'histoire, "état sous" et "notre sous" étaient équivalents à un simple "sous",
on pourrait même créer un sous-marin anonyme avec "notre sous { ... }". Ce sont maintenant
interdit en dehors de la fonctionnalité "lexical_subs". Sous la fonctionnalité "lexical_subs", ils
ont de nouvelles significations décrites dans "Sous-programmes lexicaux" dans perlsub.
Défini valeurs stockée in convivial sommes-nous forcé à octet instruments à cordes
Une valeur stockée dans une variable d'environnement a toujours été stringifiée lorsqu'elle est héritée par
processus enfants.
Dans cette version, lors de l'affectation à %ENV, les valeurs sont immédiatement transformées en chaînes et converties
n'être qu'une chaîne d'octets.
Tout d'abord, il est forcé de n'être qu'une chaîne. Ensuite, si la chaîne est utf8 et l'équivalent
de "utf8::downgrade()" fonctionne, ce résultat est utilisé ; sinon, l'équivalent de
"utf8::encode()" est utilisé et un avertissement est émis concernant les caractères larges ("Diagnostics").
"exiger" meurt pour illisible fichiers
Lorsque "require" rencontre un fichier illisible, il meurt maintenant. Il ignorait le fichier et
continuez à chercher dans les répertoires de @INC [perl #113422].
"gv_fetchmeth_*" et SUPER
Les différentes fonctions XS "gv_fetchmeth_*" permettant de traiter un paquet dont le nom se termine par
"::SUPER" spécialement. Une recherche de méthode sur le package "Foo::SUPER" serait traitée comme un
Recherche de la méthode "SUPER" sur le package "Foo". Ce n'est plus le cas. Pour faire un "SUPER"
recherche, passez la réserve "Foo" et le drapeau "GV_SUPER".
"séparer" premier argument is plus régulièrement interprété
Après quelques changements plus tôt dans la v5.17, le comportement de "split" a été simplifié : si le
L'argument PATTERN est évalué à une chaîne contenant un espace, il est traité de la même manière qu'un
littéral chaîne contenant un espace était autrefois.
Dépréciations
Module déménagements
Les modules suivants seront supprimés de la distribution principale dans une future version, et
devra alors être installé à partir du CPAN. Distributions sur CPAN qui nécessitent
ces modules devront les répertorier comme prérequis.
Les versions principales de ces modules émettront désormais des avertissements de catégorie « obsolète » pour alerter
vous à ce fait. Pour faire taire ces avertissements de dépréciation, installez les modules en question
du CPAN.
Notez que ce sont (à de rares exceptions) de bons modules que vous êtes encouragés à
continuer à utiliser. Leur désinclusion du noyau repose principalement sur leur nécessité de
démarrage d'une installation Perl entièrement fonctionnelle et compatible CPAN, généralement pas sur des problèmes
sur leur conception.
codage
L'utilisation de ce pragma est désormais fortement déconseillée. Il confond l'encodage de
texte source avec l'encodage des données d'E/S, réinterprète les séquences d'échappement dans la source
text (un choix discutable), et introduit le bogue UTF-8 dans toute la gestion de l'exécution de
chaînes de caractères. Il est cassé comme prévu et irréparable.
Pour utiliser des caractères littéraux non ASCII dans le texte source, veuillez vous référer à utf8. Pour
traitant des données d'E/S textuelles, veuillez vous reporter à Encoder et ouvrir.
Archive::Extrait
B :: peluches
B ::Lint ::Débogage
CPANPLUS et tous les modules "CPANPLUS ::*" inclus
Développeur ::InnerPackage
Journal :: Message
Journal ::Message ::Config
Log :: Message :: Gestionnaires
Journal ::Message ::Élément
Journal ::Message ::Simple
Module :: enfichable
Module::Pluggable::Objet
Objet :: Accesseur
Cosse ::LaTeX
Terme ::UI
Terme :: UI :: Historique
Obsolète Utilitaires
Les utilitaires suivants seront supprimés de la distribution de base dans une prochaine version car
leurs modules associés sont obsolètes. Ils resteront disponibles avec le
distribution CPAN applicable.
cpanp
"cpanp-exécuter-perl"
cpan2dist
Ces articles font partie de la distribution "CPANPLUS".
pod2latex
Cet élément fait partie de la distribution "Pod::LaTeX".
PL_sv_objcount
Cette variable globale d'interpréteur est utilisée pour suivre le nombre total d'objets Perl dans le
interprète. Il n'est plus maintenu et sera complètement supprimé dans Perl v5.20.
Cinq supplémentaire caractères devrait be échappé in motifs avec "/ X"
Lorsqu'un motif d'expression régulière est compilé avec "/x", Perl traite 6 caractères en blanc
espace à ignorer, tel que SPACE et TAB. Cependant, Unicode recommande 11 caractères
traité ainsi. Nous nous conformerons à cela dans une future version de Perl. En attendant, utilisez
de l'un des caractères manquants déclenchera un avertissement d'obsolescence, à moins qu'il ne soit désactivé. le
cinq caractères 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
Défini par l'utilisateur noms de personnages avec surprenant whitespace
Un nom de caractère défini par l'utilisateur avec des espaces à la fin ou plusieurs espaces à la suite est probablement une faute de frappe.
Cela génère maintenant un avertissement lorsqu'il est défini, en supposant que les utilisations de celui-ci seront
peu susceptible d'inclure l'espace blanc en excès.
Divers Callable XS fonctions sommes-nous maintenant obsolète
Toutes les fonctions utilisées pour classer les caractères seront supprimées d'une future version de
Perl, et ne doit pas être utilisé. Avec les compilateurs C participants (par exemple, gcc), compiler n'importe quel
fichier qui utilise l'un de ceux-ci générera un avertissement. Ceux-ci n'étaient pas destinés au public
utiliser; il existe des macros équivalentes, plus rapides, pour la plupart d'entre elles.
Voir "Classes de caractères" dans perlapi. La liste complète est :
"is_uni_alnum", "is_uni_alnumc", "is_uni_alnumc_lc", "is_uni_alnum_lc", "is_uni_alpha",
"is_uni_alpha_lc", "is_uni_ascii", "is_uni_ascii_lc", "is_uni_blank", "is_uni_blank_lc",
"is_uni_cntrl", "is_uni_cntrl_lc", "is_uni_digit", "is_uni_digit_lc", "is_uni_graph",
"is_uni_graph_lc", "is_uni_idfirst", "is_uni_idfirst_lc", "is_uni_lower",
"is_uni_lower_lc", "is_uni_print", "is_uni_print_lc", "is_uni_punct", "is_uni_punct_lc",
"is_uni_space", "is_uni_space_lc", "is_uni_upper", "is_uni_upper_lc", "is_uni_xdigit",
"is_uni_xdigit_lc", "is_utf8_alnum", "is_utf8_alnumc", "is_utf8_alpha", "is_utf8_ascii",
"is_utf8_blank", "is_utf8_char", "is_utf8_cntrl", "is_utf8_digit", "is_utf8_graph",
"is_utf8_idcont", "is_utf8_idfirst", "is_utf8_lower", "is_utf8_mark",
"is_utf8_perl_space", "is_utf8_perl_word", "is_utf8_posix_digit", "is_utf8_print",
"is_utf8_punct", "is_utf8_space", "is_utf8_upper", "is_utf8_xdigit", "is_utf8_xidcont",
"is_utf8_xidfirst".
De plus ces trois fonctions qui n'ont jamais fonctionné correctement sont obsolètes :
"to_uni_lower_lc", "to_uni_title_lc" et "to_uni_upper_lc".
pour implants coniques et droits Certain rare Usages of barres obliques inverses dans les expressions régulières sommes-nous maintenant obsolète
Il existe trois paires de caractères que Perl reconnaît comme métacaractères
modèles d'expression : "{}", "[]" et "()". Ceux-ci peuvent également être utilisés pour délimiter des motifs,
comme dans:
m{foo}
s(foo)(barre)
Puisqu'il s'agit de métacaractères, ils ont une signification particulière pour les modèles d'expression régulière,
et il s'avère que vous ne pouvez pas désactiver cette signification spéciale par les moyens normaux de
les précédant d'un antislash, si vous les utilisez, appariés, dans un modèle délimité par
eux. Par exemple, dans
m{foo\{1,3\}}
les barres obliques inverses ne changent pas le comportement, et cela correspond à "fo" suivi d'un pour
trois autres occurrences de "o".
Des usages comme celui-ci, où ils sont interprétés comme des métacaractères, sont extrêmement rares ; nous
pense qu'il n'y en a pas, par exemple, dans tout le CPAN. Par conséquent, cette dépréciation devrait affecter
très peu de codes. Il avertit cependant qu'un tel code doit changer, ce qui
nous permettra à son tour de modifier le comportement dans les futures versions de Perl afin que le
les barres obliques inverses ont un effet, et sans crainte que nous cassions silencieusement tout existant
code.
Scission le tokens "(?" et "(*" in Standard expressions
Un avertissement d'obsolescence est désormais émis si les "(" et "?" sont séparés par un espace blanc ou
commentaires dans les constructions d'expressions régulières "(?...)". De même, si les "(" et "*" sont
séparés par des constructions "(*VERB...)".
Pré-PerlIO IO implémentations
En théorie, vous pouvez actuellement construire perl sans PerlIO. Au lieu de cela, vous utiliseriez un emballage
autour de stdio ou sfio. En pratique, ce n'est pas très utile. Ce n'est pas bien testé, et
sans aucun support pour les couches IO ou (donc) Unicode, ce n'est pas vraiment un perl. Immeuble
sans PerlIO sera très probablement supprimé dans la prochaine version de perl.
PerlIO prend en charge une couche "stdio" si l'utilisation de stdio est souhaitée. De même, une couche sfio pourrait être
produit à l'avenir, si nécessaire.
A venir Dépréciations
· Plates-formes sans infrastructure de support
Windows CE et z/OS ont été historiquement sous-maintenus et sont actuellement
ni construit avec succès ni soumis régulièrement à des tests de fumée. Des efforts sont en cours
changer cette situation, mais il ne faut pas tenir pour acquis que les plateformes
sont sûrs et pris en charge. S'ils ne deviennent pas constructibles et régulièrement fumés, soutenez
pour eux peuvent être activement supprimés dans les versions futures. Si vous avez un intérêt pour ces
plates-formes et vous pouvez prêter votre temps, votre expertise ou votre matériel pour aider à les prendre en charge
plates-formes, veuillez informer l'effort de développement perl en envoyant un e-mail
"[email protected]".
Certaines plates-formes qui semblent autrement complètement mortes sont également sur la liste restreinte pour
suppression d'ici la v5.20.0 :
DG/UX
NeXT
Nous pensons également qu'il est probable que les versions actuelles de Perl ne construiront plus AmigaOS,
DJGPP, NetWare (natif), OS/2 et Plan 9. Si vous utilisez Perl sur une telle plate-forme
et avez un intérêt à assurer l'avenir de Perl sur eux, veuillez nous contacter.
Nous pensons que Perl a longtemps été incapable de s'appuyer sur des architectures endian mixtes (telles que
comme PDP-11) et ont l'intention de supprimer tout code de support restant. De même, coder
prenant en charge le dld GNU maintenu depuis longtemps sera bientôt supprimé si personne ne le fait
eux-mêmes connus comme un utilisateur actif.
· Échange de $< et $>
Perl a pris en charge l'idiome consistant à échanger $< et $> (et de même $( et $)) en
supprimer temporairement les autorisations depuis la version 5.0, comme ceci :
($<, $>) = ($>, $<);
Cependant, cet idiome modifie l'identifiant réel de l'utilisateur/du groupe, qui peut avoir des côtés indésirables.
effets, n'est plus utile sur aucune plate-forme supportée par perl et complique
implémentation de ces variables et affectation de liste en général.
Comme alternative, l'affectation uniquement à $> est recommandée :
local $> = $< ;
Voir aussi : Setuid démystifiéhttp://www.cs.berkeley.edu/~daw/papers/setuid-
usenix02.pdf>.
· "microperl", longtemps cassé et dont le but actuel n'est pas clair, sera supprimé.
· Réorganisation de la sémantique "\Q" dans des chaînes à double guillemet lorsqu'elle est combinée avec d'autres échappements.
Il existe plusieurs bogues et incohérences impliquant des combinaisons de "\Q" et d'échappements
comme "\x", "\L", etc., dans une paire "\Q...\E". Ceux-ci doivent être corrigés, et ce faisant
va nécessairement changer le comportement actuel. Les changements ne sont pas encore réglés.
· L'utilisation de $x, où "x" représente tout caractère de contrôle C0 réel (non imprimable) sera
interdit dans une future version de Perl. Utilisez "${x}" à la place (où encore "x" représente un
caractère de contrôle), ou mieux, $^A , où "^" est un accent circonflexe (ACCENT CIRCUMFLEX), et "A"
représente l'un des caractères répertoriés à la fin de "DIFFÉRENCES D'OPÉRATEURS" dans
perlebcdique.
Arts de la scène Améliorations
· Les listes de déclarations de variables lexicales ("my($x, $y)") sont maintenant optimisées jusqu'à
opération unique et sont donc plus rapides qu'auparavant.
· Un nouveau préprocesseur C définit "NO_TAINT_SUPPORT" a été ajouté qui, s'il est défini, désactive Perl
support de souillure tout à fait. L'utilisation des indicateurs de ligne de commande -T ou -t entraînera une erreur fatale
Erreur. Méfiez-vous que les tests de base ainsi que de nombreux tests de distribution CPAN
échouer avec ce changement. En revanche, il offre un petit avantage en termes de performances en raison de
ramification réduite.
Do pas permettre ceci. à moins que vous savoir exactement est ce que nous faisons vous sommes-nous obtention vous-même dans.
· "pack" avec des arguments constants est maintenant replié constant dans la plupart des cas [perl #113470].
· Accélérez la correspondance des expressions régulières avec les propriétés Unicode. Le gain le plus important
est pour "\X", le "cluster graphème étendu" Unicode. Le gain pour cela est d'environ 35% -
40 %. Classes de caractères entre crochets, par exemple "[0-9\x{100}]" contenant les points de code ci-dessus
255 sont désormais plus rapides.
· Sur les plates-formes qui le supportent, plusieurs anciennes macros sont désormais implémentées en tant que statique en ligne
les fonctions. Cela devrait accélérer légèrement les choses sur les plates-formes non-GCC.
· L'optimisation des hachages dans un contexte booléen a été étendue pour affecter
"scalaire(%hachage)", "%hachage ? ... : ...", et "sub { %hachage || ... }".
· Les opérateurs Filetest gèrent la pile d'une manière légèrement plus efficace.
· Les globs utilisés dans un contexte numérique sont maintenant numérisés directement dans la plupart des cas, plutôt que
être numérisé par stringification.
· L'opérateur de répétition "x" est maintenant plié en une seule constante au moment de la compilation si
appelé dans un contexte scalaire avec des opérandes constants et sans parenthèses autour de la gauche
opérande.
Modules et Pragmatique
New Modules et Pragmatique
· La version 0.16 de Config::Perl::V a été ajoutée en tant que module à double vie. Il offre
récupération de données structurées de la sortie "perl -V" comprenant des informations uniquement connues du
"perl" binaire et non disponible via Config.
Le kit de préparation mis à jour Modules et Pragmatique
Pour une liste complète des mises à jour, exécutez :
$ corelist --diff 5.16.0 5.18.0
Vous pouvez également substituer votre version préférée à la place de 5.16.0.
· Archive::Extract a été mis à jour à 0.68.
Contournez un cas marginal sous Linux avec la décompression de Busybox.
· Archive::Tar a été mis à jour à 1.90.
ptar prend désormais en charge l'option -T ainsi que les options sans tiret [rt.cpan.org #75473],
[rt.cpan.org #75475].
Auto-encoder les noms de fichiers marqués comme UTF-8 [rt.cpan.org #75474].
N'utilisez pas "tell" sur les poignées IO :: Zlib [rt.cpan.org #64339].
N'essayez pas de "chown" sur les liens symboliques.
· autodie a été amélioré à 2.13.
« autodie » fonctionne maintenant bien avec le pragma « open ».
· B a été mis à niveau vers 1.42.
La méthode "stashoff" des COP a été ajoutée. Cela permet d'accéder à un espace interne
champ ajouté en perl 5.16 sous les constructions filetées [perl #113034].
"B::COP::stashpv" prend désormais en charge les noms de packages UTF-8 et les NUL intégrés.
Toutes les valeurs d'indicateur "CVf_*" et "GVf_*" et plus liées à SV sont désormais fournies sous forme de constantes
dans l'espace de noms "B ::" et disponible pour l'exportation. La liste d'exportation par défaut n'a pas
changé.
Cela permet au module de fonctionner avec la nouvelle API pad.
· B :: Concise a été amélioré à 0.95.
L'option "-nobanner" a été corrigée et les "formats" peuvent maintenant être vidé. Lorsqu'on passe un
sous-nom à vider, il vérifiera également s'il s'agit du nom d'un format. Si un
sub et un format partagent le même nom, il videra les deux.
Cela ajoute la prise en charge des nouveaux indicateurs "OpMAYBE_TRUEBOOL" et "OPpTRUEBOOL".
· B::Debug a été mis à niveau vers 1.18.
Cela ajoute le support (expérimental) pour "B::PADLIST", qui a été ajouté dans Perl 5.17.4.
· B::Deparse a été mis à niveau vers 1.20.
Évitez les avertissements lors de l'exécution sous "perl -w".
Il déparse maintenant les contrôles de boucle avec la priorité correcte et plusieurs instructions dans
une ligne "format" est également correctement analysée.
Cette version supprime les points-virgules de fin dans les formats.
Cette version ajoute stub deparsing pour les sous-routines lexicales.
Il ne meurt plus lors de l'analyse de "sort" sans arguments. Il omet maintenant correctement le
virgule pour "system $prog @args" et "exec $prog @args".
· bignum, bigint et bigrat ont été mis à jour à 0.33.
Les remplacements pour "hex" et "oct" ont été réécrits, éliminant plusieurs problèmes,
et faire un changement incompatible :
· Auparavant, celui de "use bigint" ou "use bigrat" a été compilé plus tard prendrait
priorité sur l'autre, ce qui fait que "hex" et "oct" ne respectent pas l'autre pragma
lorsqu'il est dans la portée.
· L'utilisation de l'un de ces trois pragmata provoquerait "hex" et "oct" n'importe où ailleurs dans le
programme pour évaluer leurs arguments dans un contexte de liste et les empêcher de
déduire $_ lorsqu'il est appelé sans arguments.
· L'utilisation de l'un de ces trois pragmata ferait que "oct("1234")" renvoie 1234 (pour tout
nombre ne commençant pas par 0) n'importe où dans le programme. Maintenant "1234" est traduit
d'octal à décimal, que ce soit dans la portée du pragma ou non.
· Les remplacements globaux qui facilitent l'utilisation lexicale de "hex" et "oct" respectent désormais
tous les remplacements existants qui étaient en place avant l'installation des nouveaux remplacements,
leur revenant en dehors du champ d'application de "use bignum".
· "use bignum "hex"", "use bignum "oct"" et invocations similaires pour bigint et
bigrat exporte maintenant une fonction "hex" ou "oct", au lieu de fournir une fonction globale
passer outre.
· La carpe a été mise à jour à 1.29.
Carp n'est plus confus lorsque "caller" renvoie undef pour un paquet qui a été
supprimée.
Les fonctions "longmess()" et "shortmess()" sont maintenant documentées.
· CGI a été mis à niveau vers la version 3.63.
Les séquences d'échappement HTML non reconnues sont désormais mieux gérées, suivi problématique
les nouvelles lignes ne sont plus insérées après balises par "startform()" ou "start_form()",
et les faux avertissements "Dépendance non sécurisée" apparaissant avec certaines versions de perl sont maintenant
travaillé autour.
· Class::Struct a été mis à jour à 0.64.
Le constructeur respecte désormais les méthodes d'accès surchargées [perl #29230].
· Compresser :: Raw :: Bzip2 a été mis à niveau vers 2.060.
L'utilisation abusive de l'API "magique" de Perl a été corrigée.
· Compress::Raw::Zlib a été mis à niveau vers 2.060.
Mettez à niveau zlib fourni vers la version 1.2.7.
Correction des échecs de construction sur Irix, Solaris et Win32, ainsi que lors de la construction en C++
[rt.cpan.org #69985], [rt.cpan.org #77030], [rt.cpan.org #75222].
L'utilisation abusive de l'API "magique" de Perl a été corrigée.
"compress()", "uncompress()", "memGzip()" et "memGunzip()" ont été accélérés par
rendant la validation des paramètres plus efficace.
· CPAN::Meta::Requirements a été mis à niveau vers 2.122.
Traiter les exigences undef à "from_string_hash" comme 0 (avec un avertissement).
Ajout de la méthode "requirements_for_module".
· CPANPLUS a été mis à jour à 0.9135.
Autoriser l'ajout blib/script au CHEMIN.
Enregistrez l'historique entre les invocations du shell.
Mieux gérer plusieurs arguments "makemakerargs" et "makeflags".
Cela résout les problèmes avec le moteur source SQLite.
· Data::Dumper a été mis à niveau vers 2.145.
Il a été optimisé pour ne créer qu'un hachage scalaire vu si nécessaire, accélérant ainsi
augmenter considérablement la sérialisation.
Des tests supplémentaires ont été ajoutés afin d'améliorer la déclaration, la branche, la condition et
couverture des sous-programmes. Sur la base de l'analyse de la couverture, certains des éléments internes de
Dumper.pm a été refactorisé. Presque toutes les méthodes sont maintenant documentées.
· DB_File a été mis à niveau vers 1.827.
Le module Perl principal n'utilise plus la construction "@_".
· Devel::Peek a été mis à niveau vers 1.11.
Cela corrige la compilation avec les compilateurs C++ et fait fonctionner le module avec le nouveau pad
API.
· Digest::MD5 a été mis à niveau vers 2.52.
Correction de la solution de repli OO "Digest :: Perl :: MD5" [rt.cpan.org #66634].
· Digest::SHA a été mis à niveau vers 5.84.
Cela corrige un bogue de double libération, qui aurait pu causer des vulnérabilités dans certains cas.
· DynaLoader a été mis à niveau vers 1.18.
Cela est dû à une modification mineure du code dans XS pour l'implémentation VMS.
Cela corrige les avertissements concernant l'utilisation des sections "CODE" sans section "OUTPUT".
· Encode a été mis à niveau vers 2.49.
L'alias Mac x-mac-ce a été ajouté et divers bogues ont été corrigés dans
Encode::Unicode, Encode::UTF7 et Encode::GSM0338.
· Env a été mis à jour à 1.04.
Son implémentation SPLICE ne se comporte plus mal dans un contexte de liste.
· ExtUtils::CBuilder a été mis à niveau vers 0.280210.
Les fichiers manifestes sont désormais correctement intégrés pour les versions de VC++ qui utilisent
eux. [perl #111782, #111798].
Une liste de symboles à exporter peut maintenant être passée à "link()" sous Windows, comme sur d'autres
OS [perl #115100].
· ExtUtils :: ParseXS a été amélioré à 3.18.
Le code C généré évite désormais d'incrémenter inutilement "PL_amagic_generation" sur
versions de Perl où cela se fait automatiquement (ou sur Perl actuel où la variable no
n'existe plus).
Cela évite un faux avertissement pour les non-paramètres XSUB initialisés [perl #112776].
· File::Copy a été mis à niveau vers 2.26.
"copy()" ne met plus à zéro les fichiers lors de la copie dans le même répertoire, et aussi maintenant
échoue (comme cela a longtemps été documenté) lors de la tentative de copie d'un fichier sur
elle-même.
· File::DosGlob a été mis à niveau vers 1.10.
Le cache interne des noms de fichiers qu'il conserve pour chaque appelant est désormais libéré lorsque celui-ci
l'appelant est libéré. Cela signifie "use File::DosGlob 'glob'; eval 'scalar <*>'" n'est plus
fuite de mémoire.
· File::Fetch a été mis à niveau vers 0.38.
Ajout de l'option 'file_default' pour les URL qui n'ont pas de composant de fichier.
Utilisez "File::HomeDir" lorsqu'il est disponible et fournissez "PERL5_CPANPLUS_HOME" pour remplacer le
détection automatique.
Toujours récupérer SOMMES DE CONTRLE si "fetchdir" est défini.
· File::Find a été mis à niveau vers 1.23.
Cela corrige la gestion incohérente des chemins Unixy sur VMS.
Les fichiers individuels peuvent maintenant apparaître dans la liste des répertoires à rechercher [perl #59750].
· File::Glob a été mis à niveau vers 1.20.
File::Glob a eu exactement le même correctif que File::DosGlob. Puisque c'est ce que Perl possède
L'opérateur "glob" lui-même utilise (sauf sur VMS), cela signifie que "eval 'scalar <*>'" n'est plus
fuites.
Une liste de modèles séparés par des espaces renvoie de longues listes de résultats ne donne plus
corruption de la mémoire ou plantages. Ce bogue a été introduit dans Perl 5.16.0. [perl #114984]
· File::Spec::Unix a été mis à jour vers 3.40.
"abs2rel" peut produire des résultats incorrects lorsqu'on lui donne deux chemins relatifs ou la racine
répertoire deux fois [perl #111510].
· File::stat a été mis à jour vers 1.07.
"File :: stat" ignore le pragma filetest et avertit lorsqu'il est utilisé en combinaison
avec cela. Mais ce n'était pas un avertissement pour "-r". Cela a été corrigé [perl #111640].
"-p" fonctionne maintenant et ne renvoie pas false pour les pipes [perl #111638].
Auparavant, les opérateurs "-x" et "-X" surchargés de "File::stat" ne donnaient pas le bon
résultats pour les répertoires ou les fichiers exécutables lors de l'exécution en tant que root. Ils ont été
traiter les autorisations exécutables pour root comme pour tout autre utilisateur, effectuer
tests d'appartenance à un groupe etc pour les fichiers qui n'appartiennent pas à root. Ils suivent maintenant le bon
Comportement Unix - pour un répertoire, ils sont toujours vrais, et pour un fichier si l'un des
trois bits d'autorisation d'exécution sont définis, puis ils signalent que root peut exécuter le fichier.
Les opérateurs "-x" et "-X" intégrés de Perl ont toujours été corrects.
· File::Temp a été mis à niveau vers 0.23
Corrige divers bogues impliquant la suppression de répertoires. Diffère la dissociation des fichiers temporaires si le
la dissociation initiale échoue, ce qui résout les problèmes sur NFS.
· GDBM_File a été mis à niveau vers 1.15.
Le cinquième paramètre facultatif non documenté de "TIEHASH" a été supprimé. C'était
destiné à fournir le contrôle du rappel utilisé par les fonctions "gdbm*" en cas d'erreur fatale
erreurs (telles que des problèmes de système de fichiers), mais n'a pas fonctionné (et n'aurait jamais pu fonctionner).
Aucun code sur CPAN n'a même tenté de l'utiliser. Le rappel est maintenant toujours le précédent
par défaut, "croasser". Problèmes sur certaines plates-formes avec la façon dont la fonction "C" "croasser" est
appelés ont également été résolus.
· Hash::Util a été mis à jour à 0.15.
"hash_unlocked" et "hashref_unlocked" renvoient maintenant vrai si le hachage est déverrouillé,
au lieu de toujours retourner false [perl #112126].
"hash_unlocked", "hashref_unlocked", "lock_hash_recurse" et "unlock_hash_recurse" sont
maintenant exportable [perl #112126].
Deux nouvelles fonctions, "hash_locked" et "hashref_locked", ont été ajoutées. Curieusement,
ces deux fonctions étaient déjà exportées, même si elles n'existaient pas [perl
#112126].
· HTTP::Tiny a été mis à jour à 0.025.
Ajoutez des fonctionnalités de vérification SSL [github #6], [github #9].
Incluez l'URL finale dans le hashref de la réponse.
Ajouter l'option "adresse_locale".
Cela améliore la prise en charge de SSL.
· IO a été mis à niveau vers 1.28.
"sync()" peut désormais être appelé sur les descripteurs de fichiers en lecture seule [perl #64772].
IO::Socket s'efforce de mettre en cache ou de récupérer les informations de socket.
· IPC::Cmd a été mis à jour à 0.80.
Utilisez "POSIX ::_exit" au lieu de "exit" dans "run_forked" [rt.cpan.org #76901].
· IPC :: Open3 a été amélioré à 1.13.
La fonction "open3()" n'utilise plus "POSIX :: close()" pour fermer les descripteurs de fichiers depuis
qui interrompt le comptage des références des descripteurs de fichiers effectué par PerlIO dans les cas où le
les descripteurs de fichiers sont partagés par les flux PerlIO, ce qui entraîne des tentatives de fermeture du fichier
descripteurs une deuxième fois lorsque de tels flux PerlIO sont fermés ultérieurement.
· Locale::Codes a été mis à niveau vers 3.25.
Il comprend de nouveaux codes.
· Memoize a été mis à jour à 1.03.
Corrigez l'option de cache "MERGE".
· Module::Build a été mis à niveau vers 0.4003.
Correction d'un bug où les modules sans $VERSION pouvaient avoir une version de '0' répertoriée dans
'fournit' des métadonnées, qui seront rejetées par PAUSE.
Correction d'un bug dans PodParser pour autoriser les chiffres dans les noms de modules.
Correction d'un bug où donner deux fois des arguments les amenait à devenir des tableaux, ce qui entraînait
installer des chemins comme TABLEAU(0xdeadbeef)/lib/Foo.pm.
Une correction de bug mineur permet d'utiliser le balisage autour du "Nom" principal dans un "résumé" de POD
ligne, et quelques améliorations de la documentation ont été apportées.
· Module :: CoreList a été mis à niveau vers 2.90
Les informations de version sont désormais stockées sous forme de delta, ce qui réduit considérablement la taille du
CoreList.pm fichier.
Cela restaure la compatibilité avec les anciennes versions de perl et nettoie la corelist
données pour différents modules.
· Module::Load::Conditional a été mis à jour à 0.54.
Correction de l'utilisation de "requires" sur les perls installés sur un chemin avec des espaces.
Diverses améliorations incluent la nouvelle utilisation de Module::Metadata.
· Module::Metadata a été mis à niveau vers 1.000011.
La création d'un objet Module::Metadata pour un fichier de module typique a été accélérée
d'environ 40 %, et certains avertissements fallacieux concernant les $VERSION ont été supprimés.
· Module::Pluggable a été mis à niveau vers 4.7.
Entre autres changements, les déclencheurs sont désormais autorisés sur les événements, ce qui donne un moyen puissant
modifier le comportement.
· Net::Ping a été mis à niveau vers 2.41.
Cela corrige certains échecs de test sous Windows.
· Opcode a été mis à jour à 1.25.
Reflète la suppression de l'opcode boolkeys et l'ajout de clonecv, introcv
et les opcodes padcv.
· la surcharge a été mise à jour à 1.22.
"pas de surcharge" avertit désormais des arguments non valides, tout comme "use surcharge".
· PerlIO::encoding a été mis à jour à 0.16.
Il s'agit du module implémentant la couche d'E/S ":encoding(...)". Il ne corrompt plus
mémoire ou se bloque lorsque le back-end d'encodage réalloue le tampon ou lui donne un
typeglob ou scalaire de clé de hachage partagée.
· PerlIO::scalar a été mis à jour à 0.16.
Le scalaire de tampon fourni ne peut désormais contenir que des points de code 0xFF ou moins. [perle
#109828]
· Perl :: OSType a été amélioré à 1.003.
Cela corrige un bogue détectant le système d'exploitation VOS.
· Pod::Html a été mis à niveau vers 1.18.
L'option "--libpods" a été rétablie. Il est obsolète et son utilisation ne fait rien
autre que d'émettre un avertissement indiquant qu'il n'est plus pris en charge.
Étant donné que les fichiers HTML générés par pod2html prétendent avoir un jeu de caractères UTF-8, en fait
écrire les fichiers en utilisant UTF-8 [perl #111446].
· Pod::Simple a été mis à jour en 3.28.
De nombreuses améliorations ont été apportées, principalement à Pod::Simple::XHTML, qui dispose également d'un
changement de compatibilité : l'option "codes_in_verbatim" est désormais désactivée par défaut. Voir
cpan/Pod-Simple/ChangeLog pour tous les détails.
· re a été mis à jour à 0.23
Les [classes] à un seul caractère comme "/[s]/" ou "/[s]/i" sont désormais optimisées comme si elles l'étaient
pas de parenthèses, c'est-à-dire "/s/" ou "/s/i".
Voir la note sur "op_comp" dans la section "Modifications internes" ci-dessous.
· Safe a été mis à niveau vers 2.35.
Correction des interactions avec "Devel::Cover".
Ne pas évaluer le code sous "no strict".
· Scalar::Util a été mis à niveau vers la version 1.27.
Correction d'un problème de surcharge avec "sum".
"first" et "reduce" vérifient maintenant le rappel en premier (donc &premier(1) est interdit).
Correction de "tainted" sur les valeurs magiques [rt.cpan.org #55763].
Correction de "somme" sur des valeurs précédemment magiques [rt.cpan.org #61118].
Correction de la lecture au-delà de la fin d'un tampon fixe [rt.cpan.org #72700].
· Search::Dict a été mis à niveau vers 1.07.
Plus besoin de "stat" sur les handles de fichiers.
Utilisez "fc" pour le pliage.
· Socket a été mis à niveau vers 2.009.
Les constantes et les fonctions requises pour l'appartenance au groupe source de multidiffusion IP ont été
ajouté.
"unpack_sockaddr_in()" et "unpack_sockaddr_in6()" renvoient désormais uniquement l'adresse IP dans
contexte scalaire, et "inet_ntop()" protège désormais contre les scalaires de longueur incorrecte
passé.
Cela corrige une lecture mémoire non initialisée.
· Stockable a été mis à niveau vers 2.41.
La modification de $_[0] dans "STORABLE_freeze" n'entraîne plus de plantages [perl #112358].
Un objet dont la classe implémente "STORABLE_attach" est désormais dégelé une seule fois lorsqu'il
y a plusieurs références dans la structure en cours de dégel [perl #111918].
Les hachages restreints n'étaient pas toujours décongelés correctement [perl #73972].
Stockable croasserait lors du gel d'un objet REF béni avec un "STORABLE_freeze ()"
méthode [perl #113880].
Il peut maintenant geler et dégeler correctement les vstrings. Cela provoque une légère incompatibilité
changement dans le format de stockage, de sorte que la version du format est passée à 2.9.
Celui-ci contient diverses corrections de bogues, y compris des correctifs de compatibilité pour les anciennes versions de
Gestion de Perl et vstring.
· Sys::Syslog a été mis à niveau vers 0.32.
Celui-ci contient plusieurs corrections de bogues relatives à "getservbyname ()", "setlogsock ()" et log
niveaux dans "syslog()", ainsi que des correctifs pour Windows, Haiku-OS et GNU/kFreeBSD. Voir
cpan/Sys-Syslog/Modifications pour tous les détails.
· Term::ANSIColor a été mis à niveau vers 4.02.
Ajout de la prise en charge des italiques.
Améliorer la gestion des erreurs.
· Term::ReadLine a été mis à niveau vers 1.10. Cela corrige l'utilisation du cpan et cpanp
shells sous Windows dans le cas où le lecteur actuel contiendrait un \dev\tty
fichier.
· Test::Harness a été mis à jour en 3.26.
Correction de la sémantique glob sur Win32 [rt.cpan.org #49732].
N'utilisez pas "Win32::GetShortPathName" lors de l'appel de perl [rt.cpan.org #47890].
Ignorer -T lors de la lecture de shebang [rt.cpan.org #64404].
Traitez le cas où nous ne connaissons pas le statut d'attente du test avec plus de grâce.
Rendre la ligne "ok" du résumé du test remplaçable afin qu'elle puisse être remplacée par un plugin pour
rendre la sortie de prouver idempotent.
N'exécutez pas de fichiers accessibles en écriture par tout le monde.
· Text::Tabs et Text::Wrap ont été mis à jour vers 2012.0818. Prise en charge d'Unicode
la combinaison de caractères a été ajoutée aux deux.
· threads::shared a été mis à niveau vers 1.31.
Cela ajoute la possibilité d'avertir ou d'ignorer les tentatives de cloner des structures qui ne peuvent pas
être cloné, au lieu de simplement mourir inconditionnellement dans ce cas.
Cela ajoute la prise en charge des valeurs à double valeur telles que créées par Scalar::Util::dualvar.
· Tie::StdHandle a été mis à niveau vers 4.3.
"READ" respecte désormais l'argument offset de "read" [perl #112826].
· Time::Local a été mis à niveau vers 1.2300.
Les valeurs de secondes supérieures à 59 mais inférieures à 60 ne provoquent plus "timegm()" et
"timelocal()" pour croasser.
· Unicode::UCD a été mis à niveau vers 0.53.
Cela ajoute une fonction all_casefolds() qui renvoie tous les dossiers.
· Win32 a été mis à niveau vers 0.47.
De nouvelles API ont été ajoutées pour obtenir et définir la page de code actuelle.
Supprimé Modules et Pragmatique
· Version::Requirements a été supprimé de la distribution principale. C'est disponible
sous un autre nom : CPAN::Meta::Requirements.
Documentation
Modifications à Existant Documentation
triche
· perlcheat a été réorganisé, et quelques nouvelles sections ont été ajoutées.
données perl
· Documente maintenant explicitement le comportement des listes d'initialisation de hachage qui contiennent
clés en double.
perldiag
· L'explication des références symboliques empêchées par les "refs strictes" ne
supposons que le lecteur sait ce que sont les références symboliques.
perlfaq
· perlfaq a été synchronisé avec la version 5.0150040 du CPAN.
perfunc
· La valeur de retour de "pipe" est maintenant documentée.
· Documentation clarifiée de "notre".
perlop
· Les verbes de contrôle de boucle ("dump", "goto", "next", "last" et "redo") ont toujours eu le
même priorité que les opérateurs d'affectation, mais cela n'a pas été documenté jusqu'à présent.
Diagnostics
Les ajouts ou modifications suivants ont été apportés à la sortie de diagnostic, y compris les avertissements
et des messages d'erreur fatals. Pour la liste complète des messages de diagnostic, voir perldiag.
New Diagnostics
New Erreurs
· Délimiteur interminé pour le document ici
Ce message apparaît maintenant lorsqu'une étiquette de document ici a un guillemet initial mais
le guillemet final manque.
Cela remplace un message d'erreur faux et trompeur sur le fait de ne pas trouver l'étiquette elle-même
[perl #114104].
· panique : le pseudo-processus enfant n'a jamais été programmé
Cette erreur est générée lorsqu'un pseudo-processus enfant dans l'implémentation d'ithreads sur
Windows n'a pas été planifié dans le délai imparti et n'a donc pas pu
initialiser correctement [perl #88840].
· Le nom du groupe doit commencer par un caractère de mot non numérique dans regex ; marqué par <-- ICI dans
Mme/
Cette erreur a été ajoutée pour "(?&0)", qui n'est pas valide. Il produisait un
message d'erreur incompréhensible [perl #101666].
· Impossible d'utiliser une valeur indéfinie comme référence de sous-programme
L'appel d'une valeur indéfinie en tant que sous-programme produit maintenant ce message d'erreur. Cela à utilisé
à, mais a été accidentellement désactivé, d'abord en Perl 5.004 pour les variables non magiques, et
puis en Perl v5.14 pour les variables magiques (par exemple, liées). Il a maintenant été restauré. Dans
en attendant, undef était traité comme une chaîne vide [perl #113576].
· Les sous-marins expérimentaux "%s" ne sont pas activés
Pour utiliser les sous-titres lexicaux, vous devez d'abord les activer :
pas d'avertissements 'experimental::lexical_subs' ;
utiliser la fonctionnalité 'lexical_subs' ;
mon sous foo { ... }
New Avertissements
· "Les chaînes avec des points de code supérieurs à 0xFF peuvent ne pas être mappées dans les descripteurs de fichiers en mémoire"
· '%s' résolu en '\o{%s}%d'
· 'L'espace blanc de fin dans une définition d'alias de charnames est obsolète'
· 'Une séquence d'espaces multiples dans une définition d'alias charnames est obsolète'
· 'Le passage d'UTF-8 malformé à "%s" est obsolète'
· Le sous-programme "&%s" n'est pas disponible
(Fermeture W) Pendant la compilation, une sous-routine nommée interne ou eval tente de
capturer un sous-programme lexical externe qui n'est pas disponible actuellement. Cela peut arriver
pour l'une des deux raisons. Tout d'abord, le sous-programme lexical peut être déclaré dans un
sous-programme anonyme qui n'a pas encore été créé. (Rappelez-vous que les sous-titres nommés sont
créés au moment de la compilation, tandis que les sous-marins anonymes sont créés au moment de l'exécution.) Par exemple,
sous { mon sous une {...} sous f { \&a } }
Au moment où f est créé, il ne peut pas capturer le sous-marin "a" actuel, car le
la sous-routine anonyme n'a pas encore été créée. Inversement, ce qui suit ne donnera pas une
avertissement puisque la sous-routine anonyme a maintenant été créée et est active :
sub { my sub a {...} eval 'sub f { \&a }' }->();
La deuxième situation est causée par un eval accédant à une variable qui est sortie de
portée, par exemple,
sous f {
mon sous un {...}
sous { eval '\&a' }
}
f()->();
Ici, lorsque le '\&a' dans l'eval est compilé, f() n'est pas actuellement
exécuté, donc son &a n'est pas disponible pour la capture.
· La sous-routine "%s" &%s masque la déclaration précédente dans le même %s
(W misc) Une sous-routine "my" ou "state" a été redéclarée dans la portée courante ou
déclaration, éliminant ainsi tout accès à l'instance précédente. C'est
presque toujours une erreur typographique. Notez que le sous-programme précédent sera toujours
exister jusqu'à la fin de la portée ou jusqu'à ce que toutes les références de fermeture à celle-ci soient détruites.
· La fonctionnalité %s est expérimentale
(S expérimental) Cet avertissement est émis si vous activez une fonctionnalité expérimentale via
"utiliser la fonction". Supprimez simplement l'avertissement si vous souhaitez utiliser la fonction, mais sachez
que ce faisant, vous prenez le risque d'utiliser une fonctionnalité expérimentale qui peut
changer ou être supprimé dans une future version de Perl :
aucun avertissement "expérimental::lexical_subs" ;
utiliser la fonctionnalité "lexical_subs" ;
· sleep(%u) trop long
(W overflow) Vous avez appelé "sleep" avec un nombre qui était plus grand qu'il ne peut le faire de manière fiable
manipuler et "dormir" probablement dormi moins de temps que demandé.
· Caractère large dans setenv
Les tentatives d'insertion de caractères larges dans des variables d'environnement via %ENV provoquent désormais ce problème
Attention.
· "Nombre négatif invalide (%s) dans chr"
"chr()" avertit désormais lorsqu'une valeur négative est passée [perl #83048].
· "Débordement d'entier dans srand"
"srand()" avertit désormais lors du passage d'une valeur qui ne rentre pas dans un "UV" (puisque la valeur
sera tronqué plutôt que débordant) [perl #40605].
· "-i utilisé sans nom de fichier sur la ligne de commande, lecture depuis STDIN"
L'exécution de perl avec le drapeau "-i" avertit désormais si aucun fichier d'entrée n'est fourni sur le
ligne de commande [perl #113410].
Modifications à Existant Diagnostics
· $* n'est plus pris en charge
L'avertissement indiquant que l'utilisation de $* et $# n'est plus pris en charge est désormais généré pour chaque
emplacement qui les référence. Auparavant, il ne pouvait pas être généré si un autre
variable utilisant le même typeglob a été vu en premier (par exemple "@*" avant $*), et ne serait pas
être généré pour la deuxième utilisation et les suivantes. (Il est difficile de réparer l'échec de
générer des avertissements sans les générer également à chaque fois, et avertir tous les
time est cohérent avec les avertissements générés par $[.)
· Les avertissements pour "\b{" et "\B{" ont été ajoutés. Il s'agit d'un avertissement de dépréciation qui
devrait être désactivé par cette catégorie. On ne devrait pas avoir à désactiver l'expression régulière régulière
avertissements ainsi pour se débarrasser de ceux-ci.
· Constante (%s) : l'appel à &{$^H{%s}} n'a pas renvoyé de valeur définie
Une surcharge constante qui renvoie "undef" entraîne ce message d'erreur. Pour le numérique
constantes, il disait "Constant(undef)". "undef" a été remplacé par le
nombre lui-même.
· L'erreur produite lorsqu'un module ne peut pas être chargé inclut maintenant un indice que le module
peut avoir besoin d'être installé : "Impossible de localiser hopping.pm dans @INC (vous devrez peut-être installer
le module de saut) (@INC contient : ...)"
· argument vectoriel non pris en charge avec les versions alpha
Cet avertissement n'était pas supprimable, même avec "aucun avertissement". Maintenant c'est supprimable,
et a été déplacé de la catégorie "interne" vers la catégorie "printf".
· "Impossible de faire {n,m} avec n > m dans regex ; marqué par <-- ICI dans m/%s/"
Cette erreur fatale a été transformée en un avertissement indiquant :
Le quantificateur {n, m} avec n > m ne peut pas correspondre dans regex
(W regexp) Les minima doivent être inférieurs ou égaux aux maxima. Si vous voulez vraiment votre
regexp pour correspondre à quelque chose 0 fois, mettez simplement {0}.
· L'avertissement "Prototype Runaway" qui se produit dans des cas bizarres a été supprimé comme étant
inutile et incohérent.
· L'erreur "Pas une référence de format" a été supprimée, car c'est le seul cas où elle
pourrait être déclenché était un bogue.
· L'erreur "Impossible de créer un sous-nom %s" a été supprimée pour la même raison.
· L'erreur "Impossible d'utiliser "mon %s" dans la comparaison de tri" a été rétrogradée en avertissement,
'"my %s" utilisé dans la comparaison de tri' (avec 'state' au lieu de 'my' pour les variables d'état).
De plus, l'heuristique pour deviner si le lexique $a ou $b a été mal utilisé
ont été améliorés pour générer moins de faux positifs. Les lexicaux $a et $b ne sont plus
non autorisés s'ils se trouvent en dehors du bloc de tri. De plus, un opérateur unaire ou de liste nommé
à l'intérieur du bloc de tri n'entraîne plus l'ignorance de $a ou $b [perl #86136].
Services Publics Modifications
h2xs
· h2xs ne produit plus de code invalide pour les définitions vides. [perl #20636]
Configuration et Compilation
· Ajout de l'option "useversionedarchname" pour configurer
Lorsqu'il est défini, il inclut 'api_versionstring' dans 'archname'. Par exemple
x86_64-linux-5.13.6-thread-multi. Il est désactivé par défaut.
Cette fonctionnalité a été demandée par Tim Bunce, qui a observé que "INSTALL_BASE" crée un
structure de bibliothèque qui ne différencie pas la version de perl. Au lieu de cela, il place
fichiers spécifiques à l'architecture dans "$install_base/lib/perl5/$archname". Cela en fait
difficile d'utiliser un chemin de bibliothèque "INSTALL_BASE" commun avec plusieurs versions de perl.
En définissant "-Duseversionedarchname", le $archname sera distinct pour l'architecture
et Version API, permettant une utilisation mixte de "INSTALL_BASE".
· Ajouter une option "PERL_NO_INLINE_FUNCTIONS"
Si "PERL_NO_INLINE_FUNCTIONS" est défini, n'incluez pas "inline.h"
Cela permet au code de test d'inclure les en-têtes Perl pour les définitions sans créer de
lien dépendance à la bibliothèque perl (qui n'existe peut-être pas encore).
· Configure respectera la variable d'environnement externe "MAILDOMAIN", si elle est définie.
· "installman" n'ignore plus l'option silencieuse
· Les fichiers "META.yml" et "META.json" sont maintenant inclus dans la distribution.
· Configurez détectera désormais correctement "isblank()" lors de la compilation avec un compilateur C++.
· La détection de pager dans Configurez a été amélioré pour permettre des réponses qui spécifient
options après le nom du programme, par exemple /usr/bin/moins -R, si l'utilisateur accepte la valeur par défaut
valeur. CA aide perldoc lors de la gestion des échappements ANSI [perl #72156].
USP,EP, BP
· La suite de tests a maintenant une section pour les tests qui nécessitent de très grandes quantités de mémoire.
Ces tests ne s'exécuteront pas par défaut ; ils peuvent être activés en réglant le
Variable d'environnement "PERL_TEST_MEMORY" au nombre de gibioctets de mémoire pouvant
être utilisé en toute sécurité.
Plateforme Assistance
Discontinus Plateformes
BeOS
BeOS était un système d'exploitation pour ordinateurs personnels développé par Be Inc, initialement pour
leur matériel BeBox. L'OS Haiku a été écrit comme un remplacement open source
for/continuation de BeOS, et son port perl est à jour et activement maintenu.
UTS mondial
Le code de support relatif à UTS global a été supprimé. UTS était une version mainframe de
System V créé par Amdahl, vendu par la suite à UTS Global. Le port n'a pas été
touché depuis avant Perl v5.8.0, et UTS Global est maintenant obsolète.
MV/ESA
La prise en charge de VM/ESA a été supprimée. Le port a été testé sur 2.3.0, qu'IBM a mis fin
service en mars 2002. 2.4.0 a pris fin en juin 2003 et a été remplacé par
Z/VM. La version actuelle de Z/VM est la V6.2.0, et sa fin de service est prévue le
2015 / 04 / 30.
MPE/IX
La prise en charge de MPE/IX a été supprimée.
BPCO
Le code de support relatif à EPOC a été supprimé. EPOC était une famille d'opérateurs
systèmes développés par Psion pour les appareils mobiles. C'était le prédécesseur de Symbian.
Le port a été mis à jour pour la dernière fois en avril 2002.
Rhapsodie
La prise en charge de Rhapsody a été supprimée.
Spécifique à la plateforme Remarques
AIX
Configure ajoute désormais toujours "-qlanglvl=extc99" aux indicateurs CC sur AIX lors de l'utilisation de xlC. Cette
facilitera la compilation d'un certain nombre de modules basés sur XS qui supposent que C99 [perl
#113778].
cliquetis ++
Il existe maintenant une solution de contournement pour un bogue du compilateur qui empêchait la compilation avec clang++ depuis
Perl v5.15.7 [perl #112786].
C + +
Lors de la compilation du noyau Perl en C++ (qui n'est que partiellement pris en charge), les fonctions mathom
sont maintenant compilés en "extern "C"", pour assurer une bonne compatibilité binaire. (Cependant, binaire
la compatibilité n'est généralement pas garantie de toute façon dans les situations où cela
matière.)
Darwin
Arrêtez de coder en dur un alignement sur des limites de 8 octets pour corriger les builds à l'aide de -Dusemorebits.
Haiku
Perl devrait maintenant fonctionner immédiatement sur Haiku R1 Alpha 4.
MinuitBSD
"libc_r" a été supprimé des versions récentes de MidnightBSD et les anciennes versions fonctionnent mieux
avec "pthread". Le threading est maintenant activé en utilisant "pthread" qui corrige les erreurs de construction avec
threading activé sur 0.4-CURRENT.
Solaris
Dans Configure, évitez d'exécuter des commandes sed avec des indicateurs non pris en charge sur Solaris.
VMS
· Dans la mesure du possible, la casse des noms de fichiers et des arguments de ligne de commande est maintenant préservée par
activant les fonctionnalités CRTL "DECC$EFS_CASE_PRESERVE" et "DECC$ARGV_PARSE_STYLE" à
temps de démarrage. Ce dernier ne prend effet que lorsque l'analyse étendue est activée dans le
processus à partir duquel Perl est exécuté.
· Le jeu de caractères pour Extended Filename Syntax (EFS) est maintenant activé par défaut sur VMS.
Cela permet, entre autres, une meilleure gestion des points dans les noms de répertoires, plusieurs
des points dans les noms de fichiers et des espaces dans les noms de fichiers. Pour obtenir l'ancien comportement, définissez le
nom logique "DECC$EFS_CHARSET" à "DISABLE".
· Lier fixe sur des constructions configurées avec « - Dusemymalloc=y ».
· Un support expérimental pour construire Perl avec le compilateur HP C++ est disponible par
configuration avec "-Dusecxx".
· Tous les fichiers d'en-tête C du répertoire de niveau supérieur de la distribution sont maintenant installés
sur VMS, offrant une cohérence avec une pratique de longue date sur d'autres plateformes.
Auparavant, seul un sous-ensemble était installé, ce qui cassait les versions d'extension non essentielles pour
extensions qui dépendaient des fichiers d'inclusion manquants.
· Les guillemets sont désormais supprimés du verbe de commande (mais pas des paramètres) pour les commandes
engendré via "système", backticks ou un "open" canalisé. Auparavant, les citations sur le verbe
ont été transmis à DCL, qui ne reconnaîtrait pas la commande. Aussi, si le
verb est en fait un chemin vers une image ou une procédure de commande sur un volume ODS-5, citant
il permet maintenant au chemin de contenir des espaces.
· Le a2p build a été corrigé pour le compilateur HP C++ sur OpenVMS.
Win32
· Perl peut désormais être construit à l'aide du compilateur Visual C++ 2012 de Microsoft en spécifiant
CCTYPE=MSVC110 (ou MSVC110FREE si vous utilisez l'édition Express gratuite pour Windows
Bureau) dans win32/Makefile.
· L'option de construction sans "USE_SOCKETS_AS_HANDLES" a été supprimée.
· Correction d'un problème où perl pouvait planter lors du nettoyage des threads (y compris le
thread) dans les constructions de débogage threadées sur Win32 et éventuellement d'autres plates-formes [perl
#114496].
· Une condition de course rare qui entraînerait un sommeil prenant plus de temps que demandé, et
peut-être même suspendu, a été corrigé [perl #33096].
· Le « lien » sur Win32 essaye maintenant de placer $ ! à des valeurs plus appropriées basées sur le Win32
Code d'erreur API. [perl #112272]
Perl ne modifie plus le bloc d'environnement, par exemple lors du lancement d'un nouveau sous-processus,
lorsque l'environnement contient des caractères non-ASCII. Des problèmes connus subsistent,
cependant, lorsque l'environnement contient des caractères en dehors de la page de codes ANSI actuelle
(par exemple, voir l'article sur Unicode dans %ENV dans
<http://perl5.git.perl.org/perl.git/blob/HEAD:/Portage/todo.pod>). [perl #113536]
· La construction de perl avec certains compilateurs Windows échouait à cause d'un problème avec
l'opérateur "glob" de miniperl (qui utilise le programme "perlglob") supprimant le PATH
variable d'environnement [perl #113798].
· Une nouvelle option de makefile, "USE_64_BIT_INT", a été ajoutée aux makefiles de Windows. Ensemble
ceci pour "définir" lors de la construction d'un Perl 32 bits si vous voulez qu'il utilise des entiers 64 bits.
Réductions de la taille du code machine, déjà apportées aux DLL des modules XS dans Perl v5.17.2,
ont maintenant été étendus à la DLL perl elle-même.
La construction avec VC++ 6.0 a été cassée par inadvertance dans Perl v5.17.2 mais a maintenant été corrigée
nouveau.
WinCE
Construire sur WinCE est à nouveau possible, bien que plus de travail soit nécessaire pour pleinement
restaurer une version propre.
Interne Modifications
· Des synonymes pour le nom trompeur "av_len()" ont été créés : "av_top_index()" et
"av_tindex". Tous les trois renvoient le numéro de l'indice le plus élevé du tableau,
pas le nombre d'éléments qu'il contient.
· SvUPGRADE() n'est plus une expression. À l'origine, cette macro (et son sous-jacent
fonction, sv_upgrade()) ont été documentés comme booléens, bien qu'en réalité ils soient toujours
croassa en cas d'erreur et ne retourna jamais faux. En 2005, la documentation a été mise à jour pour
spécifier une valeur de retour vide, mais SvUPGRADE() a été laissé retournant toujours 1 pour l'envers
compatibilité. Cela a maintenant été supprimé, et SvUPGRADE() est maintenant une déclaration sans
valeur de retour.
C'est donc maintenant une erreur de syntaxe :
if (!SvUPGRADE(sv)) { croasser(...); }
Si vous avez un code comme celui-là, remplacez-le simplement par
SvUPGRADE(sv);
ou pour éviter les avertissements du compilateur avec des perls plus anciens, éventuellement
(void)SvUPGRADE(sv);
· Perl a un nouveau mécanisme de copie sur écriture qui permet à n'importe quel scalaire SvPOK d'être mis à niveau vers
un scalaire de copie sur écriture. Un décompte de références sur le tampon de chaîne est stocké dans le
tampon de chaîne lui-même. Cette fonctionnalité est pas activé by défaut.
Il peut être activé dans une construction perl en exécutant Configurez avec
-Accflags=-DPERL_NEW_COPY_ON_WRITE, et nous encourageons les auteurs XS à essayer leur
coder avec un tel perl activé et fournir des commentaires. Malheureusement, il n'y a pas encore
un bon guide pour mettre à jour le code XS pour faire face à COW. Tant qu'un tel document n'est pas
disponibles, consultez la liste de diffusion perl5-porters.
Il casse quelques modules XS en permettant aux scalaires de copie sur écriture de passer par des chemins de code
qui ne les a jamais rencontrés auparavant.
· La copie sur écriture n'utilise plus les drapeaux SvFAKE et SvREADONLY. Par conséquent, SvREADONLY
indique une vraie SV en lecture seule.
Utilisez la macro SvIsCOW (comme précédemment) pour identifier un scalaire de copie sur écriture.
· "PL_glob_index" a disparu.
· Le Perl_croak_no_modify privé a eu son paramètre de contexte enlevé. C'est maintenant a
un prototype nul. Les utilisateurs de l'API publique croak_no_modify ne sont pas affectés.
· Les scalaires de copie sur écriture (clé de hachage partagée) ne sont plus marqués en lecture seule. "SvLECTURE SEULE"
renvoie faux sur un tel SV, mais "SvIsCOW" renvoie toujours vrai.
· Un nouveau type d'op, "OP_PADRANGE" a été introduit. L'optimiseur de judas perl va,
dans la mesure du possible, substituez une seule opération de plage de pads à une marque de poussée suivie d'une ou plusieurs
pad ops, et éventuellement aussi liste de sauts et ops nextstate. De plus, l'op peut
effectuer les tâches associées au RHS d'une affectation "my(...) = @_", donc celles
les opérations peuvent également être optimisées.
· Correspondance insensible à la casse à l'intérieur d'une classe de caractères [entre crochets] avec un multi-caractère
fold n'exclut plus l'une des possibilités dans les circonstances qu'il avait l'habitude de faire.
[perl #89774].
· "PL_formfeed" a été supprimé.
· Le moteur d'expression régulière ne lit plus un octet après la fin de la cible
chaîne de caractères. Alors que pour tous les scalaires bien formés en interne, cela n'aurait jamais dû être un
problème, ce changement facilite les astuces astucieuses avec les tampons de chaîne dans les modules CPAN.
[perle #73542]
· À l'intérieur d'un bloc BEGIN, "PL_compcv" pointe maintenant vers le sous-programme en cours de compilation,
plutôt que le bloc BEGIN lui-même.
· "mg_length" est obsolète.
· "sv_len" renvoie désormais toujours un nombre d'octets et "sv_len_utf8" un nombre de caractères.
Auparavant, "sv_len" et "sv_len_utf8" étaient tous les deux bogués et retournaient parfois
octets et parfois caractères. "sv_len_utf8" ne suppose plus que son argument est
en UTF-8. Aucun de ces éléments ne crée de caches UTF-8 pour les valeurs liées ou surchargées ou pour
non-PV plus.
· "sv_mortalcopy" copie désormais les tampons de chaîne des scalaires de clé de hachage partagés lorsqu'ils sont appelés depuis
Module XS [perl #79824].
· Le nouvel indicateur "RXf_MODIFIES_VARS" peut être défini par les moteurs d'expressions régulières personnalisés pour
indiquent que l'exécution de l'expression régulière peut entraîner l'exécution de variables
modifié. Cela permet à "s///" de savoir ignorer certaines optimisations. Le propre habitué de Perl
le moteur d'expression définit cet indicateur pour les verbes de retour en arrière spéciaux qui définissent $REGMARK
et $REGERROR.
· Les API d'accès aux blocs lexicaux ont considérablement changé.
Les "PADLIST" sont maintenant des "AV" plus longs, mais leur propre type à la place. Les "PADLIST" contiennent maintenant un
"PAD" et une "PADNAMELIST" de "PADNAME", plutôt que des "AV" pour le pad et la liste des
noms de pads. Les « PAD », les « PADNAMELIST » et les « PADNAME » doivent être accessibles en tant que tels via
l'API pad nouvellement ajoutée au lieu des API simples "AV" et "SV". Voir perlapi pour
détails.
· Dans l'API regex, les rappels de capture numérotés reçoivent un index indiquant ce
la variable de correspondance est en cours d'accès. Il existe des valeurs d'index spéciales pour les "$`, $&, $&"
variables. Auparavant, les trois mêmes valeurs étaient utilisées pour récupérer "${^PREMATCH},
${^MATCH}, ${^POSTMATCH}" aussi, mais trois valeurs distinctes leur ont maintenant été attribuées.
Voir "Rappels de capture numérotés" dans perlreapi.
· "PL_sawampersand" était auparavant un booléen indiquant que l'un des "$`, $&, $&" avait
été vu; il contient maintenant trois drapeaux d'un bit indiquant la présence de chacun des
variables individuellement.
· L'entrée de typemap "CV *" prend désormais en charge la surcharge "&{}" et les typeglobs, tout comme
"&{...}" [perl #96872].
· Le drapeau "SVf_AMAGIC" pour indiquer que la surcharge est maintenant sur la cachette, pas sur l'objet. Ce
est maintenant défini automatiquement chaque fois qu'une méthode ou @ISA change, donc sa signification a
changé aussi. Cela signifie maintenant "potentiellement surchargé". Lorsque la table de surcharge est
calculé, le drapeau est automatiquement désactivé s'il n'y a pas de surcharge, il n'y a donc
devrait y avoir aucun ralentissement notable.
L'obsolescence des tables de surcharge est maintenant vérifiée lorsque les méthodes de surcharge sont invoquées,
plutôt que pendant "bénir".
"A" la magie a disparu. Les modifications apportées au traitement du drapeau "SVf_AMAGIC" éliminent le
besoin de cela.
"PL_amagic_generation" a été supprimé car il n'est plus nécessaire. Pour les modules XS, c'est
maintenant un alias de macro vers "PL_na".
Le paramètre de surcharge de secours est maintenant stocké dans une entrée de cachette distincte de
surcharge elle-même.
· Le code de traitement des caractères a été nettoyé par endroits. Les changements devraient être
opérationnellement invisible.
· La fonction "étude" est devenue une fonction no-op dans la v5.16. Il a simplement été désactivé via un "retour"
déclaration; le code a été laissé en place. Maintenant, le code prenant en charge ce que "l'étude" utilisait
faire a été supprimé.
· Sous les perls filetés, il n'y a plus de PV séparé alloué pour chaque COP à
stocker son nom de package ("cop->stashpv"). Au lieu de cela, il y a un décalage
("cop->stashoff") dans le nouveau tableau "PL_stashpad", qui contient des pointeurs de cachette.
· Dans l'API pluggable regex, la structure "regexp_engine" a acquis un nouveau champ
"op_comp", qui est actuellement réservé à l'usage interne de perl, et doit être initialisé
à NULL par d'autres modules de plugin regex.
· Une nouvelle fonction "allocopstash" a été ajoutée à l'API, mais est considérée
expérimental. Voir perlapi.
· Perl avait l'habitude d'implémenter get magic d'une manière qui cachait parfois des bogues dans le code qui
pourrait appeler mg_get() trop de fois sur des valeurs magiques. Cette dissimulation d'erreurs n'est plus
se produit, de sorte que des bogues de longue date peuvent devenir visibles maintenant. Si vous voyez des erreurs liées à la magie
dans le code XS, vérifiez qu'il, avec les fonctions de l'API Perl qu'il utilise, appelle
mg_get() une seule fois sur SvGMAGIQUE() valeurs.
· L'allocation OP pour les CV utilise désormais un répartiteur de dalle. Cela simplifie la gestion de la mémoire
pour les OP affectés à un CV, donc le nettoyage après une erreur de compilation est plus simple et
plus sûr [perl #111462][perl #112312].
· "PERL_DEBUG_READONLY_OPS" a été réécrit pour fonctionner avec le nouvel allocateur de dalle,
lui permettant d'attraper plus de violations qu'auparavant.
· L'ancien répartiteur de dalles pour les opérations, qui n'était activé que pour "PERL_IMPLICIT_SYS" et
"PERL_DEBUG_READONLY_OPS", a été retiré.
Sélectionné Punaise Correctifs
· Ici, les terminateurs de document n'ont plus besoin d'un caractère de fin de ligne lorsqu'ils
apparaître à la fin d'un fichier. C'était déjà le cas à la fin d'une évaluation de chaîne
[perl #65838].
· Les builds "-DPERL_GLOBAL_STRUCT" libèrent maintenant la structure globale après ils ont fini d'utiliser
le
· Un '/' à la fin d'un chemin dans @INC n'aura plus de '/' supplémentaire ajouté.
· La couche ":crlf" fonctionne désormais lorsque les données non lues ne rentrent pas dans leur propre tampon. [perle
#112244].
· "ungetc()" gère désormais les données encodées en UTF-8. [perl #116322].
· Un bogue dans le mappage de types de base a provoqué la correspondance de tous les types C avec l'entrée de mappage de types de base T_BOOL
ne pas être défini, mis à jour ou modifié lorsque la variable T_BOOL a été utilisée dans une SORTIE :
section avec une exception pour RETVAL. T_BOOL dans une section INPUT : n'a pas été affecté.
L'utilisation d'un type de retour T_BOOL pour une XSUB (RETVAL) n'était pas affectée. Un effet secondaire de
la correction de ce bogue est, si un T_BOOL est spécifié dans la section OUTPUT : (qui
n'a rien fait au SV), et un SV en lecture seule (littéral) est passé au XSUB, croasse
comme "Tentative de modification d'une valeur en lecture seule" se produira. [perle #115796]
· Sur de nombreuses plates-formes, fournir un nom de répertoire comme le nom du script obligeait perl à le faire
rien et signaler le succès. Il devrait maintenant signaler universellement une erreur et quitter
non nul. [perl #61362]
· "sort {undef} ..." sous les avertissements fatals ne plante plus. Il avait commencé à s'écraser dans
Perl v5.16.
· Caches bénis les uns dans les autres ("bless \%Foo::, 'Bar'; bless \%Bar::, 'Foo'") non
entraînent plus de doubles libérations. Ce bogue a commencé à se produire dans Perl v5.16.
· De nombreuses fuites de mémoire ont été corrigées, impliquant principalement des avertissements fatals et une syntaxe
erreurs.
· Certaines correspondances d'expressions régulières échouées telles que "'f' =~ /../g" n'étaient pas réinitialisées
"POS". De plus, les modèles "match-once" ("m?...?g") n'ont pas réussi à le réinitialiser également lorsqu'ils sont invoqués
une seconde fois [perl #23180].
· Plusieurs bogues impliquant "local *ISA" et "local *Foo ::" causant des caches MRO obsolètes ont
été corrigé.
· La définition d'un sous-programme lorsque son typeglob a été aliasé n'entraîne plus de périmé
caches de méthode. Ce bogue a été introduit dans Perl v5.10.
· Localisation d'un typeglob contenant une sous-routine lorsque le package du typeglob a été
supprimé de son stock parent ne produit plus d'erreur. Ce bogue a été introduit dans
Perl v5.14.
· Dans certaines circonstances, "local *method=..." ne parviendrait pas à réinitialiser les caches de méthode lors de
sortie de la portée.
· "/[.foo.]/" n'est plus une erreur, mais produit un avertissement (comme avant) et est traité
comme "/[.fo]/" [perl #115818].
· "goto $tied_var" appelle maintenant FETCH avant de décider quel type de goto (sous-routine ou
étiquette) c'est.
· Renommer les packages via l'affectation globale ("*Foo:: = *Bar::; *Bar:: = *Baz::") dans
combinaison avec "m?...?" et "reset" ne fait plus planter les builds threadés.
· Un certain nombre de bogues liés à l'attribution d'une liste au hachage ont été corrigés. Beaucoup d'entre eux
impliquent des listes avec des clés répétées comme "(1, 1, 1, 1)".
· L'expression "scalar(%h = (1, 1, 1, 1))" renvoie désormais 4, et non 2.
· La valeur de retour de "%h = (1, 1, 1)" dans le contexte de la liste était erronée. Auparavant cela
renverrait "(1, undef, 1)", maintenant il renvoie "(1, undef)".
· Perl émet désormais le même avertissement sur "($s, %h) = (1, {})" que sur "(%h) =
({})", "Référence trouvée là où une liste de taille paire est attendue".
· Un certain nombre de cas extrêmes supplémentaires dans l'affectation de liste aux hachages ont été corrigés. Pour
plus de détails voir commit 23b7025ebc.
· Les attributs appliqués aux variables lexicales ne fuient plus la mémoire. [perl #114764]
· "dump", "goto", "last", "next", "redo" ou "require" suivi d'un mot nu (ou
version) et un opérateur infixe n'est plus une erreur de syntaxe. C'était pour
ces opérateurs infixes (comme "+") qui ont une signification différente lorsqu'un terme est
attendu. [perl #105924]
· "require a::b . 1" et "require a::b + 1" ne produisent plus d'ambiguïté erronée
mises en garde. [perle #107002]
· Les appels de méthode de classe sont désormais autorisés sur n'importe quelle chaîne, et pas seulement sur les chaînes commençant par
un caractère alphanumérique. [perl #105922]
· Un motif vide créé avec "qr//" utilisé dans "m///" ne déclenche plus le "vide
motif réutilise le comportement du dernier motif". [perl #96230]
· Lier un hachage pendant l'itération n'entraîne plus de fuite de mémoire.
· La libération d'un hachage lié pendant l'itération n'entraîne plus de fuite de mémoire.
· L'affectation de liste à un tableau lié ou à un hachage qui meurt sur STORE n'entraîne plus de
fuite de mémoire.
· Si le hachage de l'indice ("%^H") est lié, l'entrée de portée au moment de la compilation (qui copie l'indice
hash) ne perd plus de mémoire si FETCH meurt. [perl #107000]
· Le pliage constant ne déclenche plus de manière inappropriée le comportement spécial "split " "".
[perle #94490]
· "defined scalar(@array)", "defined do { &foo }", et des constructions similaires traitent maintenant le
argument à "défini" comme un simple scalaire. [perle #97466]
· Exécution d'un débogage personnalisé qui ne définit aucun *DB::DB glob ou fournit un stub de sous-programme
pour &DB::DB n'entraîne plus un plantage, mais une erreur à la place. [perl #114990]
· "reset """ correspond maintenant à sa documentation. "reset" ne réinitialise que "m?...?" modèles quand
appelé sans argument. Une chaîne vide pour un argument ne fait plus rien. (Cela à utilisé
être traité comme aucun argument.) [perl #97958]
· "printf" avec un argument renvoyant une liste vide ne se lit plus après la fin du
pile, ce qui entraîne un comportement erratique. [perle #77094]
· "--subname" ne produit plus d'avertissements erronés d'ambiguïté. [perl #77240]
· « v10 » est désormais autorisé comme étiquette ou nom de package. Cela a été cassé par inadvertance lorsque
v-strings ont été ajoutés dans Perl v5.6. [perle #56880]
· "length", "pos", "substr" et "sprintf" peuvent être confondus par des liens, une surcharge,
références et typeglobs si la chaîne de ceux-ci a changé l'interne
représentation vers ou depuis UTF-8. [perl #114410]
· utf8::encode appelle désormais FETCH et STORE sur les variables liées. utf8 :: decode appelle maintenant
STORE (il appelait déjà FETCH).
· "$tied =~ s/$non_utf8/$utf8/" ne boucle plus indéfiniment si la variable liée revient
une chaîne Latin-1, un scalaire de clé de hachage partagé, une référence ou un typeglob qui se transforme en
ASCII ou Latin-1. Il s'agissait d'une régression par rapport à la v5.12.
· "s///" sans /e est maintenant plus apte à détecter quand il doit renoncer à certains
optimisations, correction de quelques cas de bugs :
· Faites correspondre les variables dans certaines constructions ("&&", "||", ".." et autres) dans le
pièce de rechange; par exemple, "s/(.)/$l{$a||$1}/g". [perle #26986]
· Alias pour faire correspondre les variables dans le remplacement.
· $REGERROR ou $REGMARK en remplacement. [perle #49190]
· Un motif vide ("s//$foo/") qui provoque l'utilisation du dernier motif réussi,
lorsque ce modèle contient des blocs de code qui modifient les variables dans le
remplacement.
· La souillure de la chaîne de remplacement n'affecte plus la souillure de la
valeur de retour de "s///e".
· Le $| la variable autoflush est créée à la volée si nécessaire. Si cela s'est produit (par exemple,
s'il a été mentionné dans un module ou eval) lorsque le descripteur de fichier actuellement sélectionné était un
typeglob avec un slot IO vide, il plantait. [perl #115206]
· Les numéros de ligne à la fin d'une évaluation de chaîne ne sont plus décalés d'un. [perl #114658]
· Filtres @INC (sous-programmes renvoyés par des sous-programmes dans @INC) qui définissent $_ sur une copie sur
write scalar n'entraîne plus l'analyseur à modifier ce tampon de chaîne en place.
· "length($object)" ne renvoie plus la valeur indéfinie si l'objet a une chaîne
surcharge qui renvoie undef. [perl #115260]
· L'utilisation de "PL_stashcache", le cache de recherche de nom de cachette pour les appels de méthode, a été
restauré,
Commit da6b625f78f5f133 en août 2011 a cassé par inadvertance le code qui recherche
valeurs dans "PL_stashcache". Comme il s'agit d'une seule cache, tout se passe correctement
travailler sans elle.
· L'erreur "Impossible de localiser via une référence" avait disparu dans la v5.16.0 lorsque "local
%$ref" apparaissait sur la dernière ligne d'un sous-programme lvalue. Cette erreur a disparu pour
"\local %$ref" en perl v5.8.1. Il a maintenant été restauré.
· L'analyse des here-docs a été considérablement améliorée, corrigeant plusieurs bogues d'analyse
et des plantages et une fuite de mémoire, et en corrigeant les mauvais numéros de ligne suivants sous
certaines conditions.
· À l'intérieur d'un eval, le message d'erreur pour un here-doc non terminé n'a plus de retour à la ligne
au milieu [perl #70836].
· Une substitution à l'intérieur d'un motif de substitution ("s/${s|||}//") ne confond plus le
analyseur.
· C'est peut-être un endroit étrange pour autoriser les commentaires, mais "s//"" # hello/e" a toujours fonctionné,
à moins que il se trouve qu'il y a un caractère nul avant le premier #. Maintenant, cela fonctionne même dans
la présence de nuls.
· Une plage invalide dans "tr///" ou "y///" n'entraîne plus de fuite mémoire.
· String eval ne traite plus un opérateur de type guillemet délimité par des points-virgules à la toute fin
("eval 'q;;'") comme une erreur de syntaxe.
· "warn {$_ => 1} + 1" n'est plus une erreur de syntaxe. L'analyseur utilisé pour se confondre
avec certains opérateurs de liste suivis d'un hachage anonyme puis d'un opérateur infixe
qui partage sa forme avec un opérateur unaire.
· "(caller $n)[6]" (qui donne le texte de l'évaluation) utilisé pour renvoyer l'analyseur réel
amortir. La modifier pourrait entraîner des plantages. Maintenant, il renvoie toujours une copie. le
la chaîne renvoyée n'a plus "\n;" collée jusqu'au bout. Le texte retourné aussi
inclut les corps here-doc, qui étaient auparavant omis.
· Le cache de position UTF-8 est maintenant réinitialisé lors de l'accès aux variables magiques, pour éviter le
le tampon de chaînes et le cache de position UTF-8 se désynchronisent [perl #114410].
· Divers cas où get magic a été appelé deux fois pour des chaînes UTF-8 magiques ont été
fixé.
· Ce code (lorsqu'il n'est pas en présence de $& etc.)
$_ = 'x' x 1_000_000 ;
1 tant que /(.)/ ;
utilisé pour ignorer la copie du tampon pour des raisons de performances, mais a souffert de 1 $, etc.
changer si la chaîne d'origine a changé. C'est maintenant corrigé.
· Perl n'utilise plus PerlIO pour signaler les messages hors mémoire, comme PerlIO pourrait
essayer d'allouer plus de mémoire.
· Dans une expression régulière, si quelque chose est quantifié avec "{n,m}" où "n > m", il
ne peut pas correspondre. Auparavant, c'était une erreur fatale, mais maintenant ce n'est qu'un avertissement
(et que quelque chose ne correspondra pas). [perl #82954].
· Auparavant, il était possible pour les formats définis dans des sous-programmes qui ont ensuite été
indéfini et redéfini pour fermer les variables dans le mauvais pad (le nouveau
sous englobant), entraînant des plantages ou des erreurs de "copie bizarre".
· La redéfinition des XSUB au moment de l'exécution pourrait produire des avertissements avec le mauvais numéro de ligne.
· Le format %vd sprintf ne prend pas en charge les objets de version pour les versions alpha. Cela à utilisé
pour afficher le format lui-même (%vd) lors du passage d'une version alpha, et également émettre un
Avertissement "Conversion invalide dans printf". Il ne le fait plus, mais produit le vide
chaîne dans la sortie. Il n'y a plus non plus de fuite de mémoire dans ce cas.
· Les appels "$obj->SUPER::method" dans le package principal pouvaient échouer si le package SUPER avait
déjà été consulté par d'autres moyens.
· L'alias Stash ("*foo:: = *bar::") n'entraîne plus les appels SUPER à ignorer les modifications apportées à
méthodes ou @ISA ou utilisez le mauvais package.
· Les appels de méthode sur les packages dont les noms se terminent par ::SUPER ne sont plus traités comme SUPER
appels de méthode, entraînant l'échec de la recherche de la méthode. Par ailleurs, définir
les sous-programmes dans de tels packages ne les font plus être trouvés par les appels de méthode SUPER
sur le paquet contenant [perl #114924].
· "\w" correspond maintenant aux points de code U+200C (ZERO WIDTH NON-JOINER) et U+200D (ZERO WIDTH
MENUISIER). "\W" ne correspond plus à ceux-ci. Ce changement est dû au fait que Unicode a corrigé
leur définition de ce à quoi "\w" doit correspondre.
· "dump LABEL" ne perd plus son étiquette.
· Le pliage constant ne modifie plus le comportement des fonctions comme "stat()" et
"truncate()" qui peut prendre soit des noms de fichiers soit des descripteurs. "stat 1 ? foo : bar" maintenant
traite son argument comme un nom de fichier (puisqu'il s'agit d'une expression arbitraire), plutôt que
le manche "foo".
· "truncate FOO, $len" ne revient plus à traiter "FOO" comme un nom de fichier si le
filehandle a été supprimé. Cela a été cassé dans Perl v5.16.0.
· Les redéfinitions de sous-programmes après les affectations sub-to-glob et glob-to-glob ne sont plus
provoquer des doubles libérations ou des messages de panique.
· "s///" transforme désormais les vstrings en chaînes simples lors de l'exécution d'une substitution, même si
la chaîne résultante est la même ("s/a/a/").
· Les avertissements d'incompatibilité de prototype ne traitent plus à tort les sous-marins constants comme n'ayant pas
prototype alors qu'ils ont en fait "".
· Les sous-programmes constants et les déclarations directes n'empêchent plus la non-concordance des prototypes
avertissements d'omettre le sous-nom.
· "undef" sur un sous-programme efface maintenant les vérificateurs d'appels.
· L'opérateur « ref » a commencé à perdre de la mémoire sur les objets bénis dans Perl v5.16.0. Ce
a été corrigé [perl #114340].
· "use" n'essaie plus d'analyser ses arguments comme une déclaration, ce qui rend "use constant { ()
} ;" une erreur de syntaxe [perl #114222].
· Lors du débogage des versions, les avertissements "non initialisés" à l'intérieur des formats ne provoquent plus d'assertion
les échecs.
· Lors du débogage des versions, les sous-programmes imbriqués dans les formats ne provoquent plus d'assertion
échecs [perl #78550].
· Les formats et les déclarations "use" sont maintenant autorisés à l'intérieur des formats.
· "print $x" et "sub { print $x }->()" produisent désormais toujours la même sortie. C'était
possibilité pour ce dernier de refuser de clôturer sur $x si la variable n'était pas active ;
par exemple, s'il a été défini en dehors d'un sous-programme nommé en cours d'exécution.
· De même, "print $x" et "print eval '$x'" produisent désormais la même sortie. Ça aussi
permet aux variables "my $x if 0" d'être vues dans le débogueur [perl #114018].
· Les formats appelés récursivement ne piétinent plus leurs propres variables lexicales, mais chacun
l'appel récursif a son propre ensemble de lexicaux.
· Tenter de libérer un format actif ou le handle qui lui est associé ne donne plus de résultats
dans un accident.
· L'analyse de format n'est plus confondue par les accolades, les points-virgules et la faible priorité
les opérateurs. Auparavant, il était possible d'utiliser des accolades comme délimiteurs de format (au lieu de "="
et "."), mais seulement parfois. Points-virgules et opérateurs de faible priorité dans le format
les lignes d'argument ne confondent plus l'analyseur en ignorant la valeur de retour de la ligne. Dans
lignes d'arguments de format, les accolades peuvent désormais être utilisées pour les hachages anonymes, au lieu d'être
toujours traité comme des blocs "do".
· Les formats peuvent désormais être imbriqués dans des blocs de code dans des expressions régulières et d'autres citations
constructions ("/(?{...})/" et "qq/${...}/") [perl #114040].
· Les formats ne sont plus créés après des erreurs de compilation.
· Sous les versions de débogage, le -DA L'option de ligne de commande a commencé à planter dans Perl v5.16.0.
Il a été corrigé [perl #114368].
· Un scénario de blocage potentiel impliquant l'arrêt prématuré d'un pseudo-forké
enfant dans une version Windows avec ithreads activé a été corrigé. Cela résout le
problème commun de la t/op/fork.t test suspendu sous Windows [perl #88840].
· Le code qui génère des erreurs de "require()" pourrait potentiellement lire un ou deux
octets avant le début du nom de fichier pour les noms de fichiers de moins de trois octets et
se terminant par "/\.p?\z/". Cela a maintenant été corrigé. Notez que cela n'aurait jamais pu arriver
avec des noms de module donnés à "use()" ou "require()" de toute façon.
· La gestion des noms de chemin des modules donnés à "require()" a été rendue thread-safe sur
VMS.
· Des sockets non bloquants ont été corrigés sur VMS.
· Le pod peut désormais être imbriqué dans le code à l'intérieur d'une construction entre guillemets en dehors d'une chaîne eval.
Cela fonctionnait uniquement dans les évaluations de chaîne [perl #114040].
· "goto ''" recherche maintenant une étiquette vide, produisant l'erreur "goto must have label"
message, au lieu de quitter le programme [perl #111794].
· "goto "\0"" meurt maintenant avec "Can't find label" au lieu de "goto must have label".
· La fonction C "hv_store" provoquait des plantages lorsqu'elle était utilisée sur "%^H" [perl #111000].
· Un call checker attaché à un prototype de fermeture via "cv_set_call_checker" est maintenant copié
aux fermetures clonées à partir de celui-ci. Donc "cv_set_call_checker" fonctionne maintenant à l'intérieur d'un attribut
gestionnaire pour une fermeture.
· L'écriture dans $^N n'avait auparavant aucun effet. Maintenant, il croasse avec "Modification d'une lecture-
seule valeur" par défaut, mais qui peut être remplacée par une expression régulière personnalisée
moteur, comme avec $1 [perl #112184].
· "undef" sur un glob de caractères de contrôle ("undef *^H") n'émet plus d'avertissement erroné
à propos de l'ambiguïté [perl #112456].
· Par souci d'efficacité, de nombreux opérateurs et fonctions intégrées renvoient le même scalaire
chaque fois. Les sous-routines Lvalue et les sous-routines dans le CORE :: l'espace de noms autorisaient
ce détail de mise en œuvre à travers. "print &CORE::uc("a"), &CORE::uc("b")"
utilisé pour imprimer "BB". La même chose se produirait avec un sous-programme lvalue retournant
la valeur de retour de "uc". Maintenant, la valeur est copiée dans de tels cas.
· Syntaxe "méthode {}" avec un bloc vide ou un bloc renvoyant une liste vide utilisée pour
planter ou utiliser une valeur aléatoire laissée sur la pile comme invocateur. Maintenant, il produit un
Erreur.
· « vec » fonctionne désormais avec des décalages extrêmement importants (>2 Go) [perl #111730].
· Les modifications apportées aux paramètres de surcharge prennent désormais effet immédiatement, tout comme les modifications apportées à l'héritage
qui affectent la surcharge. Ils ne prenaient effet qu'après "bénir".
Les objets qui ont été créés avant une classe avaient une surcharge utilisée pour rester non-
surchargé même si la classe a été surchargée via "use surcharge" ou @ISA
changements, et même après "bénir". Ceci a été corrigé [perl #112708].
· Les classes avec surcharge peuvent désormais hériter des valeurs de repli.
· La surcharge ne respectait pas une valeur de repli de 0 s'il y avait des objets surchargés
des deux côtés d'un opérateur d'affectation comme "+=" [perl #111856].
· "pos" croasse maintenant avec des arguments de hachage et de tableau, au lieu de produire des erreurs
avertissements.
· "while(each %h)" implique maintenant "while(defined($_ = each %h))", comme "readline" et
"readdir".
· Les sous-marins dans le CORE :: l'espace de noms ne se bloquent plus après "undef *_" lorsqu'ils sont appelés sans
liste d'arguments (&CORE::time sans parenthèses).
· "unpack" ne produit plus l'erreur "'/' doit suivre un type numérique dans unpack" lorsque
ce sont les données qui sont en cause [perl #60204].
· "join" et "@array" n'appellent plus FETCH qu'une seule fois sur un $" lié [perl #8931].
· Certains appels de sous-programmes générés par la compilation d'opérations de base affectées par un "CORE :: GLOBAL"
override avait vérification op effectuée deux fois. La vérification est toujours idempotente pour
Code Perl, mais la double vérification peut avoir de l'importance lorsque des vérificateurs d'appels personnalisés sont impliqués.
· Une condition de concurrence existait autour de la fourche qui pouvait entraîner l'envoi d'un signal au
parent doit être géré à la fois par le parent et l'enfant. Les signaux sont maintenant brièvement bloqués autour
fork pour éviter que cela ne se produise [perl #82580].
· L'implémentation de blocs de code dans des expressions régulières, telles que "(?{})" et
"(??{})", a été fortement retravaillé pour éliminer toute une série de bogues. L'utilisateur principal-
les changements visibles sont :
· Les blocs de code dans les modèles sont maintenant analysés dans le même passage que les environs
code; en particulier il n'est plus nécessaire d'avoir des accolades équilibrées : cela maintenant
travaux:
/(?{ $x='{' })/
Cela signifie que ce message d'erreur n'est plus généré :
Séquence (?{...}) non terminée ou non {}-équilibrée dans regex
mais une nouvelle erreur peut être vue:
Séquence (?{...}) non terminée par ')'
De plus, les blocs de code littéraux dans les modèles d'exécution ne sont compilés qu'une seule fois,
au moment de la compilation perl :
pour mon $p (...) {
# ce bloc de code 'FOO' est compilé une fois,
# en même temps que la boucle 'for' environnante
/$p{(?{FOO;})/ ;
}
· Les variables lexicales sont désormais saines en ce qui concerne la portée, la récursivité et le comportement de fermeture.
En particulier, "/A(?{B})C/" se comporte (du point de vue de la fermeture) exactement comme "/A/
&& do { B } && /C/", tandis que "qr/A(?{B})C/" est comme "sub {/A/ && do { B } && /C/}".
Donc, ce code fonctionne maintenant comme vous pouvez vous y attendre, en créant trois regex qui correspondent à 0,
1 et 2 :
pour mon $i (0..2) {
appuyez sur @r, qr/^(??{$i})$/ ;
}
"1" =~ $r[1] ; # allumettes
· Le pragma "use re 'eval'" n'est désormais requis que pour les blocs de code définis à
Durée; en particulier dans ce qui suit, le texte du motif $r est toujours
interpolé dans le nouveau modèle et recompilé, mais l'individu a compilé
les blocs de code dans $r sont réutilisés plutôt que d'être recompilés, et "use re 'eval'"
n'est plus nécessaire :
mon $r = qr/abc(?{....})def/;
/xyz$r/;
· Les opérateurs de contrôle de flux ne se bloquent plus. Chaque bloc de code s'exécute dans une nouvelle dynamique
scope, donc "next" etc. ne verra aucune boucle englobante. "return" renvoie une valeur
du bloc de code, et non d'un sous-programme englobant.
· Perl met normalement en cache la compilation des modèles d'exécution et ne recompile pas
si le modèle n'a pas changé, mais cela est maintenant désactivé si nécessaire pour le
comportement correct des fermetures. Par exemple:
mon $code = '(??{$x})' ;
pour mon $x (1..3) {
# recompiler pour voir la nouvelle valeur de $x à chaque fois
$x =~ /$code/;
}
· Les drapeaux "/msix" et "(?msix)" etc. sont maintenant propagés dans la valeur de retour de
"(??{})" ; cela fonctionne maintenant:
"AB" =~ /a(??{'b'})/i ;
· Les avertissements et les erreurs apparaîtront provenir du code environnant (ou pour l'exécution
blocs de code, à partir d'un eval) plutôt qu'à partir d'un "re_eval":
utilisez re 'eval'; $c = '(?{ avertir "foo" })' ; /$c/;
/(?{ avertir "foo" })/ ;
donnait autrefois :
foo à (re_eval 1) ligne 1.
foo à (re_eval 2) ligne 1.
et donne maintenant :
foo à (eval 1) ligne 1.
foo à /some/prog ligne 2.
· Perl peut maintenant être recompilé pour utiliser n'importe quelle version d'Unicode. Dans la v5.16, cela fonctionnait sur
Unicodes 6.0 et 6.1, mais il y avait divers bogues si des versions antérieures étaient utilisées ; la
plus la version est ancienne, plus il y a de problèmes.
· « vec » ne produit plus d'avertissements « non initialisés » dans le contexte de lvalue [perl #9423].
· Une optimisation impliquant des chaînes fixes dans des expressions régulières pourrait entraîner une grave
pénalité de performance dans les cas extrêmes. Ceci a été corrigé [perl #76546].
· Dans certains cas, inclure des sous-modèles vides dans une expression régulière (comme
"(?:)" ou "(?:|)") peut désactiver certaines optimisations. Cela a été corrigé.
· Le message "Impossible de trouver un numéro d'opération" produit par "prototype" lors du passage d'une chaîne
comme "CORE :: nonexistent_keyword" passe maintenant UTF-8 et les NUL intégrés sans changement
[perl #97478].
· "prototype" traite maintenant les variables magiques comme $1 de la même manière que les variables non magiques
lors de la recherche du préfixe CORE ::, au lieu de les traiter comme des noms de sous-programmes.
· Sous perls filetés, un bloc de code d'exécution dans une expression régulière pourrait corrompre le
nom du package stocké dans l'arborescence des opérations, ce qui entraîne de mauvaises lectures dans "l'appelant", et peut-être
plante [perl #113060].
· Référencement d'un prototype de fermeture ("\&{$_[1]}" dans un gestionnaire d'attributs pour une fermeture) non
résultats plus longs dans une copie de la sous-routine (ou des échecs d'assertion lors du débogage
construit).
· "eval '__PACKAGE__'" renvoie maintenant la bonne réponse sur les constructions filetées si le courant
le paquet a été assigné (comme dans "*ThisPackage:: = *ThatPackage::") [perl
#78742].
· Si un paquet est supprimé par le code qu'il appelle, il est possible que "l'appelant" voie un
cadre de pile appartenant à ce package supprimé. "appelant" pourrait planter si la réserve est
l'adresse mémoire a été réutilisée pour un scalaire et une substitution a été effectuée sur le même
scalaire [perl #113486].
· "UNIVERSAL::can" ne traite plus son premier argument différemment selon qu'il
c'est une chaîne ou un nombre en interne.
· "open" avec "<&" pour le mode vérifie si le troisième argument est un nombre, en
déterminer s'il faut le traiter comme un descripteur de fichier ou un nom de descripteur. Magique
des variables comme $1 échouaient toujours à la vérification numérique et étaient traitées comme un descripteur
des noms.
· La gestion des variables magiques par "warn" ($1, liens) a subi plusieurs corrections.
"FETCH" n'est appelé qu'une seule fois maintenant sur un argument lié ou un $@ lié [perl #97480]. Lié
les variables renvoyant des objets dont la chaîne est "" ne sont plus ignorées. Un $@ lié
qui est arrivé à renvoyer une référence précédent l'heure à laquelle il a été utilisé n'est plus
ignoré.
· "warn """ traite désormais $@ avec un nombre de la même manière, qu'il
s'est produit via "$@=3" ou "$@="3"". Il ignorait le premier. Maintenant, il s'ajoute
"\t...caught", comme il l'a toujours fait avec "$@="3"".
· Opérateurs numériques sur les variables magiques (par exemple, "$1 + 1") utilisés pour utiliser la virgule flottante
opérations même là où les opérations sur les nombres entiers étaient plus appropriées, entraînant une perte de
précision sur les plateformes 64 bits [perl #109542].
· La négation unaire ne traite plus une chaîne comme un nombre si la chaîne a été utilisée
comme un nombre à un moment donné. Ainsi, si $x contient la chaîne "dogs", "-$x" renvoie
"-dogs" même si "$y=0+$x" s'est produit à un moment donné.
· Dans Perl v5.14, "-'-10'" a été corrigé pour renvoyer "10", et non "+10". Mais des variables magiques
(1 $, égalité) n'étaient pas corrigés jusqu'à présent [perl #57706].
· La négation unaire traite désormais les chaînes de manière cohérente, quel que soit le "UTF8" interne
drapeau.
· Une régression introduite dans Perl v5.16.0 impliquant "tr/LISTE DE RECHERCHE/LISTE DE REMPLACEMENT/" a
été corrigé. Seule la première instance est censée avoir un sens si un caractère
apparaît plus d'une fois dans "LISTE DE RECHERCHE". Dans certaines circonstances, la dernière instance
remplaçait tous les précédents. [perle #113584]
· Les expressions régulières telles que "qr/\87/" inséraient auparavant silencieusement un caractère NUL,
correspondant comme s'il avait été écrit "qr/\00087/". Maintenant ça correspond comme si ça avait été
écrit "qr/87/", avec un message indiquant que la séquence "\8" n'est pas reconnue.
· "__SUB__" fonctionne maintenant dans des blocs spéciaux ("BEGIN", "END", etc.).
· La création de threads sous Windows peut théoriquement entraîner un plantage si elle est effectuée à l'intérieur d'un
Bloc "COMMENCER". Il ne fonctionne toujours pas correctement, mais il ne plante plus [perl
#111610].
· "\&{''}" (avec la chaîne vide) autovivifie maintenant un stub comme n'importe quel autre sous-nom, et
ne génère plus l'erreur "Impossible de créer un sous-programme" [perl #94476].
· Une régression introduite dans la v5.14.0 a été corrigée, dans laquelle certains appels au "re"
le module écraserait $_ [perl #113750].
· "do FILE" définit ou efface désormais toujours $@, même lorsque le fichier ne peut pas être lu. Ce
garantit que tester $@ en premier (comme recommandé par la documentation) renvoie toujours le
résultat correct.
· L'itérateur de tableau utilisé pour la construction "each @array" est désormais correctement réinitialisé lorsque
@array est effacé [perl #75596]. Cela se produit, par exemple, lorsque le tableau est globalement
assigné à, comme dans "@array = (...)", mais pas quand son valeurs sont affectés. En terme
de l'API XS, cela signifie que "av_clear()" va maintenant réinitialiser l'itérateur.
Cela reflète le comportement de l'itérateur de hachage lorsque le hachage est effacé.
· "$class->can", "$class->isa", et "$class->DOES" renvoient maintenant des résultats corrects,
que le paquet référencé par $class existe ou non [perl #47113].
· Les signaux entrants n'effacent plus $@ [perl #45173].
· Autoriser les déclarations "my()" avec une liste de variables vide [perl #113554].
· Lors de l'analyse, les sous-titres déclarés après des erreurs ne laissent plus de stubs [perl #113712].
· Les fermetures ne contenant aucune évaluation de chaîne ne s'accrochent plus à leurs sous-routines contenantes,
permettant aux variables fermées par des sous-programmes externes d'être libérées lorsque le sous-programme externe est
libéré, même si le sous-marin interne existe toujours [perl #89544].
· Duplication des descripteurs de fichiers en mémoire en ouvrant avec un mode "<&=" ou ">&=" arrêté
fonctionne correctement dans la v5.16.0. Cela faisait que la nouvelle poignée faisait référence à un autre
variable scalaire. Ceci a été corrigé [perl #113764].
· Les expressions "qr//" ne se bloquent plus avec les moteurs d'expressions régulières personnalisés qui ne
définir "offs" au moment de la compilation de l'expression régulière [perl #112962].
· "supprimer local" ne plante plus avec certains tableaux magiques et hachages [perl
#112966].
· "local" sur les éléments de certains tableaux magiques et hachages utilisés pour ne pas s'arranger pour avoir
l'élément supprimé à la sortie de la portée, même si l'élément n'existait pas avant "local".
· "scalar(write)" ne renvoie plus plusieurs éléments [perl #73690].
· Les conversions de chaîne en virgule flottante n'analysent plus mal certaines chaînes sous "utiliser
paramètres régionaux" [perl #109318].
· Les filtres @INC qui meurent ne fuient plus la mémoire [perl #92252].
· Les implémentations d'opérations surchargées sont maintenant appelées dans le bon contexte.
Cela permet, entre autres, de pouvoir remplacer correctement "<>" [perl #47119].
· Spécifier uniquement la touche "fallback" lors de l'appel de "use surcharge" se comporte désormais correctement
[perl #113010].
· "sub foo { my $a = 0; while ($a) { ... } }" et "sub foo { while (0) { ... } }" maintenant
retourne la même chose [perl #73618].
· La négation de chaîne se comporte désormais de la même manière sous "utiliser un entier ;" comme il le fait sans [perl
#113012].
· "chr" renvoie désormais le caractère de remplacement Unicode (U+FFFD) pour -1, quel que soit le
représentation interne. -1 utilisé pour envelopper si l'argument était lié ou une chaîne
intérieurement.
· L'utilisation d'un "format" après la libération de son sous-titre pourrait planter à partir de perl v5.12.0, si
le format faisait référence aux variables lexicales du sub externe.
· L'utilisation d'un "format" après que son sous-jacent n'était pas défini pouvait planter à partir de perl v5.10.0,
si le format faisait référence à des variables lexicales du sub externe.
· Utiliser un "format" défini à l'intérieur d'une fermeture, lequel format fait référence à des variables lexicales
de l'extérieur, n'a jamais vraiment fonctionné à moins que l'appel "write" ne soit directement à l'intérieur du
fermeture. Dans la v5.10.0, il a même commencé à planter. Maintenant, la copie de cette fermeture la plus proche
le haut de la pile des appels est utilisé pour trouver ces variables.
· Les formats qui se ferment sur des variables dans des blocs spéciaux ne se bloquent plus si un stub existe
avec le même nom que le bloc spécial avant que le bloc spécial ne soit compilé.
· L'analyseur ne devient plus confus, traitant "eval foo ()" comme une erreur de syntaxe si
précédé de "print ;" [perl #16249].
· La valeur de retour de "syscall" n'est plus tronquée sur les plateformes 64 bits [perl
#113980].
· Le pliage constant ne provoque plus l'impression de "print 1 ? FOO : BAR" sur la poignée FOO
[perl #78064].
· "do subname" appelle maintenant le sous-programme nommé et utilise le nom de fichier qu'il renvoie, à la place
d'ouvrir un fichier nommé "sous-nom".
· Les sous-programmes recherchés par les crochets de vérification rv2cv (enregistrés par les modules XS) sont maintenant pris
en considération pour déterminer si "foo bar" doit être le sous-appel
"foo(bar)" ou l'appel de méthode ""bar"->foo".
· "CORE::foo::bar" n'est plus traité spécialement, permettant aux remplacements globaux d'être
appelé directement via "CORE::GLOBAL::uc(...)" [perl #113016].
· L'appel d'un sub indéfini dont le typeglob a été indéfini produit maintenant l'habituel
Erreur "Sous-routine non définie appelée", au lieu de "Pas une référence CODE".
· Deux bogues impliquant @ISA ont été corrigés. "*ISA = *glob_without_array" et "undef
*EST UN; @{*ISA}" empêcherait les futures modifications de @ISA de mettre à jour le
caches utilisés pour rechercher des méthodes. Le cas *glob_without_array était une régression de
Perl v5.12.
· Les optimisations d'expressions régulières provoquaient parfois "$" avec "/m" pour produire un échec ou
correspondances incorrectes [perl #114068].
· "__SUB__" fonctionne désormais dans un bloc "sort" lorsque le sous-programme englobant est prédéclaré
avec "sous foo ;" syntaxe [perl #113710].
· Les propriétés Unicode ne s'appliquent qu'aux points de code Unicode, ce qui entraîne quelques subtilités
lorsque les expressions régulières sont mises en correspondance avec les points de code ci-dessus Unicode. Il y a un
avertissement généré pour attirer votre attention sur ce point. Cependant, cet avertissement était
généré de manière inappropriée dans certains cas, comme lorsqu'un programme était en cours d'analyse.
Les correspondances non Unicode telles que "\w" et "[:word:]" ne doivent pas générer l'avertissement, car
leurs définitions ne les limitent pas à s'appliquer uniquement aux points de code Unicode. Maintenant le
message n'est généré que lors de la correspondance avec "\p{}" et "\P{}". Il reste un
bogue, [perl #114148], pour les très rares propriétés en Unicode qui correspondent à une seule
point de code. L'avertissement n'est pas généré s'ils correspondent à un Unicode supérieur
point de code.
· Les avertissements non initialisés mentionnant des éléments de hachage ne mentionneraient le nom de l'élément que si
ce n'était pas dans le premier seau du hachage, en raison d'une erreur off-by-one.
· Un bogue de l'optimiseur d'expressions régulières pouvait entraîner un comportement incorrect de "^" multiligne dans
la présence de sauts de ligne, tels que ""/\n\n" =~ m#\A(?:^/$)#im" ne correspondrait pas
[perl #115242].
· La « fourchette » échouée dans le contexte de liste ne corrompt plus la pile. "@a = (1, 2, fourche, 3)"
utilisé pour engloutir le 2 et assigner "(1, undef, 3)" si l'appel "fork" a échoué.
· De nombreuses fuites de mémoire ont été corrigées, impliquant principalement des variables liées qui meurent,
classes de caractères d'expressions régulières et blocs de code, et erreurs de syntaxe.
· Affectation d'une expression régulière ("${qr//}") à une variable qui contient un
le nombre à virgule flottante ne provoque plus d'échecs d'assertion sur les versions de débogage.
· L'affectation d'une expression régulière à un scalaire contenant un nombre ne provoque plus
numération ultérieure pour produire des nombres aléatoires.
· L'attribution d'une expression régulière à une variable magique n'efface plus la magie.
Il s'agissait d'une régression par rapport à la v5.10.
· L'attribution d'une expression régulière à un scalaire béni n'entraîne plus de plantages. Ce
était également une régression de v5.10.
· L'expression régulière peut maintenant être assignée aux éléments de hachage et de tableau liés avec aplatissement
en chaînes.
· Numifying une expression régulière n'a plus comme conséquence un avertissement non initialisé.
· Les indices de tableaux négatifs n'entraînent plus l'ignorance des méthodes EXISTS des variables liées.
Il s'agissait d'une régression par rapport à la v5.12.
· Les indices de tableaux négatifs n'entraînent plus de plantages sur les tableaux liés à des non-objets.
· "$byte_overload .= $utf8" n'entraîne plus d'UTF-8 à double codage si le côté gauche
scalaire a produit une chaîne UTF-8 la dernière fois que la surcharge a été invoquée.
· "goto &sub" utilise maintenant la valeur actuelle de @_, au lieu d'utiliser le tableau
sous-programme a été appelé à l'origine avec. Cela signifie "local @_ = (...); goto &sub" maintenant
fonctionne [perl #43077].
· Si un débogueur est invoqué de manière récursive, il n'écrase plus son propre lexical
variables. Auparavant sous récursivité, tous les appels partageaient le même ensemble d'éléments lexicaux
variable [perl #115742].
· *_{ARRAY} renvoyé par un sous-programme ne devient plus spontanément vide.
· Lors de l'utilisation de "dire" pour imprimer vers un descripteur de fichier lié, la valeur de "$\" est correctement
localisé, même s'il était auparavant undef. [perl #119927]
Connu Problèmes
· Les chaînes avec indicateur UTF8 dans %ENV sur HP-UX 11.00 sont boguées
L'interaction des chaînes avec indicateur UTF8 et %ENV sur HP-UX 11.00 est actuellement douteuse dans
d'une manière pas encore entièrement diagnostiquée. Attendez-vous à des échecs de test dans t/op/magic.t, Suivie par
comportement inconnu lors du stockage de caractères larges dans l'environnement.
Nécrologie
Hojung Yoon (AMORETTE), 24 ans, de Séoul, Corée du Sud, a pris son long repos le 8 mai 2013
avec figurine de lama et carte TIMTOADY dédicacée. C'était un brillant jeune Perl 5 & 6
hacker et membre dévoué de Seoul.pm. Il a programmé Perl, parlé Perl, mangé Perl et
aimait Perl. Nous pensons qu'il programme toujours en Perl avec son ordinateur portable IBM cassé
quelque part. Il va nous manquer.
Remerciements
Perl v5.18.0 représente environ 12 mois de développement depuis Perl v5.16.0 et
contient environ 400,000 lignes de modifications dans 2,100 fichiers de 113 auteurs.
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 v5.18.0 :
Aaron Crane, Aaron Trevena, Abhijit Menon-Sen, Adrian M. Enache, Alan Haggai Alavi,
Alexandr Ciornii, Andrew Tam, Andy Dougherty, Anton Nikishaev, Aristote Pagaltzis,
Augustina Blair, Bob Ernst, Brad Gilbert, Breno G. de Oliveira, Brian Carlson, Brian
Fraser, Charlie Gonzalez, Chip Salzenberg, Chris "BinGOs" Williams, Christian Hansen,
Colin Kuskie, Craig A. Berry, Dagfinn Ilmari Mannsaaker, Daniel Dragan, Daniel Perrett,
Darin McBride, Dave Rolsky, David Golden, David Leadbeater, David Mitchell, David Nicol,
Dominic Hargreaves, E. Choroba, Eric Brine, Evan Miller, Père Chrysostomos, Florian
Ragwitz, François Perrad, George Greer, Goro Fuji, H.Merijn Brand, Herbert Breunung, Hugo
van der Sanden, Igor Zaytsev, James E Keenan, Jan Dubois, Jasmine Ahuja, Jerry D. Hedden,
Jess Robinson, Jesse Luehrs, Joaquin Ferrero, Joel Berger, John Goodyear, John Peacock,
Karen Etheridge, Karl Williamson, Karthik Rajagopalan, Kent Fredric, Leon Timmermans,
Lucas Holt, Lukas Mai, Marcus Holland-Moritz, Markus Jansen, Martin Hasch, Matthew
Horsfall, Max Maischein, Michael G Schwern, Michael Schroeder, Moritz Lenz, Nicholas
Clark, Niko Tyni, Oleg Nesterov, Patrik Haegglund, Paul Green, Paul Johnson, Paul
Marquis, Peter Martini, Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Rhesa
Rozendaal, Ricardo Signes, Robin Barker, Ronald J. Kimball, Ruslan Zakirov, Salvador
Fandin~o, Sawyer X, Scott Lanning, Sergey Alekseev, Shawn M Moore, Shirakata Kentaro,
Shlomi Fish, Sisyphe, Smylers, Steffen Mueller, Steve Hay, Steve Peters, Steven
Schubiger, Sullivan Beck, Sven Strickroth, Sébastien Aperghis-Tramoni, Thomas Sibley,
Tobias Leich, Tom Wyant, Tony Cook, Vadim Konovalov, Vincent Pit, Volker Schatz, Walt
Mankowski, Yves Orton, Zefram.
La liste ci-dessus est presque certainement incomplète car elle est générée automatiquement à partir de
historique du contrôle de version. En particulier, il n'inclut pas les noms des (beaucoup
apprécié) les contributeurs qui ont signalé des problèmes au traqueur de bogues Perl.
La plupart des changements inclus dans cette version proviennent des modules CPAN inclus dans
Le noyau de Perl. Nous sommes reconnaissants à l'ensemble de la communauté CPAN d'avoir aidé Perl à prospérer.
Pour une liste plus complète de tous les contributeurs historiques de Perl, veuillez consulter le AUTEURS
dans la distribution source Perl.
Reporting Bugs
Si vous trouvez ce que vous pensez être un bogue, vous pouvez consulter les articles récemment publiés sur le
groupe de discussion comp.lang.perl.misc et la base de données de bogues perl sur http://rt.perl.org/perlbug/ .
Il peut également y avoir des informations sur 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 perl5180delta en ligne à l'aide des services onworks.net