GoGPT Best VPN GoSearch

Icône de favori OnWorks

perl5140delta - En ligne dans le Cloud

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

Il s'agit de la commande perl5140delta 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


perl5140delta - Quoi de neuf pour perl v5.14.0

DESCRIPTION


Ce document décrit les différences entre la version 5.12.0 et la version 5.14.0.

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

Certaines des corrections de bogues de cette version ont été rétroportées dans les versions ultérieures de
5.12.x. Ceux-ci sont indiqués avec la version 5.12.x entre parenthèses.

Avis


Comme décrit dans perlpolicy, la sortie de Perl 5.14.0 marque la fin officielle du support
pour Perl 5.10. Les utilisateurs de Perl 5.10 ou d'une version antérieure devraient envisager de passer à une version plus récente
sortie de Perl.

Core Améliorations


Unicode
Unicode Version 6.0 is maintenant soutenu (la plupart)

Perl est livré avec la base de données Unicode 6.0 mise à jour avec le Corrigendum #8
<http://www.unicode.org/versions/corrigendum8.html>, avec une exception notée ci-dessous. Voir
<http://unicode.org/versions/Unicode6.0.0/> pour plus de détails sur la nouvelle version. Perl ne
prendre en charge toutes les propriétés provisoires Unicode, y compris les nouvelles pour cette version.

Unicode 6.0 a choisi d'utiliser le nom "BELL" pour le caractère à U+1F514, qui est un
symbole qui ressemble à une cloche, et est utilisé dans les téléphones portables japonais. Cela entre en conflit avec
l'utilisation de longue date de Perl d'avoir "BELL" signifie le caractère ASCII "BEL", U+0007. Dans
Perl 5.14, "\N{BELL}" continue de signifier U+0007, mais son utilisation génère une dépréciation
message d'avertissement à moins que ces avertissements ne soient désactivés. Le nouveau nom de U+0007 en Perl est
"ALERT", qui correspond bien à la séquence abrégée existante pour cela, "\a".
"\N{BEL}" signifie U+0007, sans avertissement donné. Le personnage à U+1F514 n'a pas de nom dans
5.14, mais peut être référencé par "\N{U+1F514}". En Perl 5.16, "\N{BELL}" fera référence à
U+1F514 ; tout le code qui utilise "\N{BELL}" doit être converti pour utiliser "\N{ALERT}", "\N{BEL}",
ou "\a" avant la mise à niveau.

Full pour "utilisation caractéristique 'chaînes_unicode'"

Cette version fournit des fonctionnalités complètes pour "utiliser la fonctionnalité 'unicode_strings'". Sous son
portée, toutes les opérations de chaîne exécutées et les expressions régulières compilées (même si exécutées
en dehors de sa portée) ont une sémantique Unicode. Voir "la fonctionnalité 'unicode_strings'" dans
caractéristique. Cependant, voir "Classes de caractères entre crochets inversés et plis à plusieurs caractères",
ci-dessous.

Cette fonctionnalité évite la plupart des formes du "Bogue Unicode" (voir "Le "Bogue Unicode"" dans
perlunicode pour plus de détails). S'il est possible que votre code traite Unicode
cordes, tu es fortement encouragés à utiliser ce sous-pragma pour éviter les mauvaises surprises.

"\N{NAME}" et « personnages » améliorations

· "\N{NOM}" et "charnames::vianame" connaissent maintenant les noms de personnages abrégés
répertoriés par Unicode, tels que NBSP, SHY, LRO, ZWJ, etc. ; toutes les abréviations usuelles pour
les caractères de contrôle C0 et C1 (tels que ACK, BEL, CAN, etc.) ; et quelques nouvelles variantes
de certains noms complets C1 qui sont d'usage courant.

· Unicode a plusieurs nommé caractère séquences, dans laquelle des séquences de code particulières
les points reçoivent des noms. "\N{NOM}" les reconnaît maintenant.

· "\N{NOM}", "charnames::vianame" et "charnames::viacode" connaissent maintenant chaque
caractère en Unicode. Dans les versions précédentes de Perl, ils ne connaissaient pas le Hangul
syllabes ni plusieurs caractères CJK (chinois/japonais/coréen).

· Il est maintenant possible de remplacer les abréviations de Perl par vos propres alias personnalisés.

· Vous pouvez désormais créer un alias personnalisé de l'ordinal d'un caractère, connu par "\N{NOM}",
"charnames::vianame()" et "charnames::viacode()". Auparavant, les alias devaient être
noms de caractères Unicode officiels. Cela a rendu impossible la création d'un alias pour
des points de code non nommés, tels que ceux réservés à un usage privé.

· La nouvelle fonction charnames::string_vianame() est une version d'exécution de "\N{NOM}}",
retournant la chaîne de caractères dont le nom Unicode est son paramètre. Il peut gérer
Les séquences de caractères nommées Unicode, alors que les séquences préexistantes charnames::vianame()
ne peut pas, car ce dernier renvoie un seul point de code.

Voir charnames pour plus de détails sur tous ces changements.

New avertissements catégories pour problématique (non)Unicode code des points.

Trois nouvelles sous-catégories d'avertissements de "utf8" ont été ajoutées. Ceux-ci vous permettent de désactiver
certains avertissements "utf8", tout en permettant à d'autres avertissements de rester activés. Les trois catégories
sont : « substitut » lorsque des substituts UTF-16 sont rencontrés ; "nonchar" lorsque Unicode non-
des points de code de caractère sont rencontrés ; et "non_unicode" lorsque le code pointe au-dessus de la valeur légale
Un maximum Unicode de 0x10FFFF est rencontré.

Toutes non signé Plus-value Vous pouvez be codée as a caractère

Avec cette version, Perl adopte un modèle selon lequel toute valeur non signée peut être traitée comme un
point de code et encodé en interne (comme utf8) sans avertissements, pas seulement les points de code
qui sont légaux en Unicode. Cependant, à moins que utf8 ou la sous-catégorie correspondante (voir
élément précédent) des avertissements lexicaux ont été explicitement désactivés, produisant ou
l'exécution d'une opération définie par Unicode telle que la mise en majuscule sur un tel point de code génère
un avertissement. Tenter de les saisir en utilisant des règles strictes (comme avec le
":encoding(UTF-8)") continuera à échouer. Avant cette version, la gestion était
incohérent et par endroits, incorrect.

Les non-caractères Unicode, dont certains étaient auparavant considérés à tort comme illégaux dans
places par Perl, contrairement à la norme Unicode, sont désormais toujours légales en interne.
Leur entrée ou leur sortie fonctionne de la même manière qu'avec les points de code Unicode non légaux,
parce que la norme Unicode dit qu'ils sont (seulement) illégaux pour "l'échange ouvert".

Unicode base de données fichiers pas Installé

Les fichiers de base de données Unicode ne sont plus installés avec Perl. Cela n'affecte aucun
fonctionnalités en Perl et économise un espace disque important. Si vous avez besoin de ces fichiers, vous pouvez
les télécharger depuishttp://www.unicode.org/Public/zipped/6.0.0/>.

Régulier Expressions
"(?^...)" construire signifie défaut modificateurs

Un caret ASCII "^" immédiatement après un "(?" dans une expression régulière signifie maintenant que le
la sous-expression n'hérite pas des modificateurs environnants tels que "/i", mais revient au Perl
par défaut. Tous les modificateurs suivant le caret remplacent les valeurs par défaut.

La stringification des expressions régulières utilise désormais cette notation. Par exemple, "qr/hlagh/i"
était auparavant stringifié comme "(?i-xsm:hlagh)", mais maintenant il est stringifié comme
"(?^i:hlagh)".

L'objectif principal de ce changement est de permettre des tests qui reposent sur la stringification pas à
doivent changer chaque fois que de nouveaux modificateurs sont ajoutés. Voir "Modèles étendus" dans perlre.

Ce changement est susceptible de casser le code qui compare les expressions régulières stringifiées avec
chaînes fixes contenant "?-xism".

"/ré", "/l", "/u", et "/une" modificateurs

Quatre nouveaux modificateurs d'expression régulière ont été ajoutés. Ceux-ci s'excluent mutuellement : un
ne peut être allumé qu'à la fois.

· Le modificateur "/l" dit de compiler l'expression régulière comme si elle était dans la portée de
"utiliser la locale", même si ce n'est pas le cas.

· Le modificateur "/u" dit de compiler l'expression régulière comme si elle était dans la portée de
un pragma "use feature 'unicode_strings'".

· Le modificateur "/d" (par défaut) est utilisé pour remplacer n'importe quel "use locale" et "use feature
pragmas 'unicode_strings'" en vigueur au moment de la compilation de l'expression régulière.

· Le modificateur d'expression régulière "/a" restreint "\s", "\d" et "\w" et le POSIX
("[[:posix:]]") classes de caractères à la plage ASCII. Leurs compléments et "\b" et
"\B" sont affectés en conséquence. Sinon, "/a" se comporte comme le modificateur "/u", dans
cette correspondance insensible à la casse utilise la sémantique Unicode.

Si le modificateur "/a" est répété, alors en plus dans la correspondance insensible à la casse, non
Un caractère ASCII peut correspondre à un caractère non-ASCII. Par example,

"k" =~ /\N{SIGNE DE KELVIN}/ai
"\xDF" =~ /ss/ai

correspondre mais

"k" =~ /\N{SIGNE DE KELVIN}/aai
"\xDF" =~ /ss/aai

ne correspondent pas.

Voir "Modificateurs" dans perlre pour plus de détails.

Non destructif substitution

Les opérateurs de substitution ("s///") et de translittération ("y///") prennent désormais en charge un "/r"
option qui copie la variable d'entrée, effectue la substitution sur la copie, et
renvoie le résultat. L'original reste inchangé.

mon $vieux = "chat" ;
mon $nouveau = $ancien =~ s/chat/chien/r ;
# $old est "chat" et $new est "chien"

Ceci est particulièrement utile avec "map". Voir perlop pour plus d'exemples.

rentrant Standard expression moteur

Il est maintenant sûr d'utiliser des expressions régulières dans les blocs de code "(?{...})" et "(??{...})"
à l'intérieur des expressions régulières.

Ces blocs sont encore expérimentaux, cependant, et ont toujours des problèmes avec le lexique ("mon")
variables et sorties anormales.

"utilisation re '/drapeaux'"

Le pragma "re" a maintenant la possibilité d'activer les indicateurs d'expression régulière jusqu'à la fin de
la portée lexicale :

utilisez re "/x" ;
"foo" =~ / (.+) /; # /x implicite

Voir "mode '/flags'" dans re pour plus de détails.

\o{...} pour octaux

Il existe une nouvelle séquence d'échappement octale, "\o", dans des contextes de type guillemets doubles. Cette construction
permet aux grands ordinaux octaux au-delà du maximum actuel de 0777 d'être représentés. Ça aussi
vous permet de spécifier un caractère en octal qui peut être concaténé en toute sécurité avec d'autres
extraits d'expression régulière et qui ne seront pas confondus avec une référence arrière à une capture d'expression régulière
grouper. Voir "Capturer des groupes" dans perlre.

Ajoutez des effets de "\p{Titlecase}" as a synonyme pour "\p{Titre}"

Ce synonyme est ajouté pour la symétrie avec les noms de propriété Unicode "\p{Majuscule}" et
"\p{minuscule}".

Régulier expression débogage sortie amélioration

La sortie de débogage des expressions régulières (activée par "use re 'debug'") utilise désormais l'hexadécimal
lors de l'échappement de caractères non ASCII, au lieu d'octal.

Retour Plus-value of "effacer $+{...}"

Les moteurs d'expressions régulières personnalisés peuvent désormais déterminer la valeur de retour de « delete » sur un
saisie de "%+" ou "%-".

syntaxique Améliorations
tableau et hachage CONTENANT fonctions accepter

Mise en garde: Cette fonctionnalité est considérée comme expérimentale, car le comportement exact peut changer dans un
future version de Perl.

Toutes les fonctions intégrées qui fonctionnent directement sur les conteneurs de tableau ou de hachage acceptent désormais également
références dures non bénies à des tableaux ou des hachages :

|-----------------------------+-------------------- -------|
| Syntaxe traditionnelle | Syntaxe laconique |
|-----------------------------+-------------------- -------|
| push @$arrayref, @truc | pousser $arrayref, @truc |
| unshift @$arrayref, @truc | unshift $arrayref, @truc |
| pop @$arrayref | pop $arrayref |
| décalage @$arrayref | déplacer $arrayref |
| épissure @$arrayref, 0, 2 | épissure $arrayref, 0, 2 |
| clés %$hashref | clés $hashref |
| clés @$arrayref | clés $arrayref |
| valeurs %$hashref | valeurs $hashref |
| valeurs @$arrayref | valeurs $arrayref |
| ($k,$v) = chaque %$hashref | ($k,$v) = chaque $hashref |
| ($k,$v) = chaque @$arrayref | ($k,$v) = chaque $arrayref |
|-----------------------------+-------------------- -------|

Cela permet à ces fonctions intégrées d'agir sur de longues chaînes de déréférencement ou sur le retour
valeur des sous-routines sans avoir besoin de les envelopper dans "@{}" ou "%{}":

push @{$obj->tags}, $new_tag ; # ancienne façon
poussez $obj->tags, $new_tag ; # nouvelle façon

for ( keys %{$hoh->{genres}{artists}} ) {...} # ancienne méthode
for ( keys $hoh->{genres}{artists} ) {...} # nouvelle façon

Single terme prototype

Le prototype "+" est une alternative spéciale à "$" qui agit comme "\[@%]" lorsqu'on lui donne un
tableau littéral ou variable de hachage, mais sinon forcera le contexte scalaire sur l'argument.
Voir "Prototypes" dans perlsub.

"emballer" bloc syntaxe

Une déclaration de package peut désormais contenir un bloc de code, auquel cas la déclaration est en
portée à l'intérieur de ce bloc uniquement. Donc "package Foo { ... }" est précisément équivalent à "{
paquet Foo; ... }". Cela fonctionne aussi avec un numéro de version dans la déclaration, comme dans
"package Foo 1.2 { ... }", qui est sa fonctionnalité la plus attrayante. Voir perfunc.

Déclaration qui Vous pouvez apparaître in plus endroits

Les étiquettes d'instruction peuvent désormais apparaître avant tout type d'instruction ou de déclaration, telle que
"paquet".

Stacked qui

Plusieurs étiquettes d'instructions peuvent désormais apparaître avant une seule instruction.

Majuscule X/B permis in hexadécimal/binaire littéraux

Les littéraux peuvent désormais utiliser les préfixes majuscules « 0X... » ou « 0B... », en plus du
déjà pris en charge les syntaxes "0x..." et "0b..." [perl #76296].

C, Ruby, Python et PHP prennent déjà en charge cette syntaxe, et cela rend Perl plus interne
cohérent : un aller-retour avec "eval sprintf "%#X", 0x10" renvoie maintenant 16, tout comme "eval
sprintf "%#x", 0x10".

écrasable attacher fonctions

"tie", "lié" et "untie" peuvent maintenant être remplacés [perl #75902].

Exception Maniabilité
Pour les rendre plus fiables et cohérents, plusieurs modifications ont été apportées à la façon dont "mourir",
"avertir", et $@ se comportent.

· Lorsqu'une exception est levée à l'intérieur d'un "eval", l'exception ne risque plus de
être écrasé par le code destructeur en cours d'exécution pendant le déroulement. Auparavant, le
exception a été écrite dans $@ au début du processus de lancement et serait écrasée
si "eval" était utilisé en interne dans le destructeur pour un objet qui devait être libéré
en sortant de l'« eval » extérieur. Maintenant, l'exception est écrite dans $@ dernière chose
avant de quitter l'"eval" externe, de sorte que le code exécuté immédiatement après puisse s'appuyer
sur la valeur dans $@ correspondant correctement à cet "eval". ($@ est toujours également défini
avant de quitter le "eval", pour le bien des destructeurs qui s'appuient sur cela.)

De même, un "$@ local" à l'intérieur d'un "eval" n'écrase plus aucune exception levée dans son
portée. Auparavant, la restauration de $@ lors du déroulement écraserait toute exception
étant jeté. Maintenant, l'exception atteint le "eval" de toute façon. Donc "local $@" est sûr
avant un "mourir".

Les exceptions lancées par les destructeurs d'objets ne modifient plus le $@ de l'environnement
le contexte. (Si le contexte environnant était un déroulement d'exception, c'était un autre
moyen d'écraser l'exception levée.) Auparavant, une telle exception était
parfois émis comme un avertissement, puis l'un ou l'autre était ajouté à la chaîne environnante
$@ ou complètement remplacé le $@ environnant, selon que cette exception et
les $@ environnants étaient des chaînes ou des objets. Maintenant, une exception dans cette situation est
toujours émis comme un avertissement, laissant le $@ environnant intact. En plus de
destructeurs d'objets, cela affecte également tout appel de fonction exécuté par le code XS utilisant le
Indicateur "G_KEEPERR".

· Les avertissements pour « warn » peuvent désormais être des objets de la même manière que des exceptions pour « die ». Si un
l'avertissement basé sur l'objet obtient la gestion par défaut de l'écriture dans l'erreur standard, il est
chaîne comme avant avec le nom de fichier et le numéro de ligne ajoutés. Mais un
Le gestionnaire $SIG{__WARN__} reçoit désormais un avertissement basé sur l'objet en tant qu'objet, où
auparavant, il était passé le résultat de la chaîne de l'objet.

Autres Améliorations
Affectation à $0 ensembles le héritage processus prénom avec prctl () on Linux

Sous Linux, le nom du processus hérité est désormais défini avec prctl(2), en plus de modifier la
Nom POSIX via "argv[0]", comme Perl le fait depuis la version 4.000. Maintenant, les utilitaires système qui
lire le nom du processus hérité tel que ps, topet la bien-aimée Sonate en la majeur killall reconnaître le nom que vous avez défini lorsque
attribuer à $0. La chaîne que vous fournissez est tronquée à 16 octets ; cette limitation est
imposé par Linux.

srand() maintenant Retours le seed

Cela permet aux programmes qui ont besoin d'avoir des résultats reproductibles de ne pas avoir à proposer
leur propre mécanisme de génération de graines. Au lieu de cela, ils peuvent utiliser srand() et ranger le retour
valeur pour une utilisation future. Un exemple est un programme de test avec trop de combinaisons à tester
de manière exhaustive dans le temps disponible pour chaque exécution. Il peut tester un sous-ensemble aléatoire à chaque fois
et, en cas d'échec, enregistrez la graine utilisée pour cette exécution afin qu'elle puisse être utilisée plus tard
pour produire les mêmes résultats.

comme printf fonctions comprendre post-1980 longueur du câble modificateurs

Les opérateurs printf et sprintf de Perl, et la fonction de remplacement interne printf de Perl, maintenant
comprendre les modificateurs de taille C90 "hh" ("char"), "z" ("size_t") et "t" ("ptrdiff_t").
De plus, lorsqu'il est compilé avec un compilateur C99, Perl comprend maintenant le modificateur de taille "j"
("intmax_t") (mais ce n'est pas portable).

Ainsi, par exemple, sur n'importe quelle machine moderne, "sprintf("%hhd", 257)" renvoie "1".

New de défis variable "${^GLOBAL_PHASE}"

Une nouvelle variable globale, "${^GLOBAL_PHASE}", a été ajoutée pour permettre l'introspection de la
phase actuelle de l'interpréteur Perl. C'est expliqué en détail dans "${^GLOBAL_PHASE}" dans
perlvar et dans "BEGIN, UNITCHECK, CHECK, INIT et END" dans perlmod.

"-d:-foo" en cours "Devel::foo::unimport"

La syntaxe -d:toto a été étendu en 5.6.1 pour faire -d:foo=barre équivalente à -MDevel::foo=barre,
qui se développe en interne pour "utiliser Devel::foo 'bar'". Perl permet maintenant de préfixer le module
nom avec -, avec la même sémantique que -M; C'est:

"-d:-foo"
Équivalent à -M-Devel ::foo: se développe en "no Devel::foo" et appelle
"Devel::foo->unimport()" si cette méthode existe.

"-d:-foo=bar"
Équivalent à -M-Devel ::foo=bar: se développe en "no Devel::foo 'bar'", et appelle
"Devel::foo->unimport("bar")" si cette méthode existe.

Ceci est particulièrement utile pour supprimer les actions par défaut d'un module "Devel::*"
méthode "import" tout en la chargeant pour le débogage.

Descripteur de fichier méthode en cours charge IO::Fichier on demande

Lorsqu'un appel de méthode sur un descripteur de fichier mourrait parce que la méthode ne peut pas être résolue et
IO::File n'a pas été chargé, Perl charge maintenant IO::File via la méthode "require" et les tentatives
résolution à nouveau :

ouvrir mon $fh, ">", $fichier ;
$fh->binmode(":raw"); # charge IO::File et réussit

Cela fonctionne également pour les globs comme "STDOUT", "STDERR" et "STDIN":

STDOUT->rinçage automatique(1);

Étant donné que cette charge à la demande ne se produit que si la résolution de la méthode échoue, l'approche héritée
du chargement manuel d'une classe parent IO::File pour la prise en charge partielle de la méthode fonctionne toujours comme
attendu:

utiliser IO::Handle;
ouvrir mon $fh, ">", $fichier ;
$fh->rinçage automatique(1); # IO::Fichier non chargé

Agencement des IPv6 soutenez

Le module « Socket » offre de nouvelles possibilités pour IPv6, y compris les implémentations du
Les fonctions "Socket::getaddrinfo()" et "Socket::getnameinfo()", ainsi que les fonctions associées
constantes et une poignée de nouvelles fonctions. Voir Prise.

DTrace sondes maintenant comprennent paquet prénom

Les sondes "DTrace" incluent désormais un argument supplémentaire, "arg3", qui contient le package
le sous-programme entré ou quitté a été compilé.

Par exemple, en utilisant le script DTrace suivant :

perl$target :::sous-entrée
{
printf("%s::%s\n", copyinstr(arg0), copyinstr(arg3));
}

puis en cours d'exécution :

$ perl -e 'sous test { }; test'

"DTrace" imprimera :

principal::test

New C Apis
Voir "Modifications internes".

Sécurité


Défini par l'utilisateur Standard expression propriétés
"Propriétés des caractères définis par l'utilisateur" dans perlunicode documenté que vous pouvez créer des
propriétés en définissant des sous-programmes dont les noms commencent par "In" ou "Is". Cependant, Perl a fait
n'applique pas réellement cette restriction de nommage, donc "\p{foo::bar}" pourrait appeler toto :: bar() if
ça existait. La convention documentée est maintenant appliquée.

De plus, Perl ne permet plus aux expressions régulières corrompues d'invoquer une propriété définie par l'utilisateur.
Il meurt simplement à la place [perl #82616].

Incompatible Modifications


Perl 5.14.0 n'est binairement compatible avec aucune version stable précédente.

En plus des sections qui suivent, voir « Changements de l'API C ».

Régulier Expressions et Chaîne Escapes
Inversé entre crochets caractère les classes et multi-caractères plis

Certains caractères correspondent à une séquence de deux ou trois caractères dans l'expression régulière "/i"
correspondance selon les règles Unicode. Un exemple est "LATIN SMALL LETTER SHARP S" qui correspond
la séquence "ss".

'ss' =~ /\A[\N{LETTRE MINUSCULE LATINE SHARP S}]\z/i # Correspondances

Ceci, cependant, peut conduire à des résultats très contre-intuitifs, surtout lorsqu'ils sont inversés.
Pour cette raison, Perl 5.14 n'utilise pas la correspondance multi-caractères "/i" en mode inversé
classes de personnages.

'ss' =~ /\A[^\N{LETTRE MINUSCULE LATINE SHARP S}]+\z/i # ???

Cela devrait correspondre à toutes les séquences de caractères qui ne sont pas le "SHARP S" ni ce que "SHARP S"
correspond sous "/i". "s" n'est pas "SHARP S", mais Unicode dit que "ss" est ce que "SHARP S"
correspond sous "/i". Alors, lequel « gagne » ? Échecez-vous la correspondance parce que la chaîne a
« ss » ou l'accepter parce qu'il a un « s » suivi d'un autre « s » ?

Les versions précédentes de Perl autorisaient cette correspondance multi-caractères, mais en raison de bogues, il
la plupart du temps ne fonctionnait pas.

\400-\777

Dans certaines circonstances, "\400"-"\777" dans les regex se sont comportés différemment
se comportent dans tous les autres contextes de type guillemets doubles. Depuis 5.10.1, Perl a publié un
avertissement de dépréciation lorsque cela se produit. Maintenant, ces littéraux se comportent de la même manière dans tous
contextes de type guillemets doubles, à savoir être équivalent à "\x{100}"-"\x{1FF}", sans
avertissement de dépréciation.

Utilisation de "\400"-"\777" dans l'option de ligne de commande -0 conservent leur sens conventionnel.
Ils aspirent des fichiers d'entrée entiers ; auparavant, cela n'était documenté que pour - 0777.

En raison de diverses ambiguïtés, vous devez utiliser la nouvelle construction "\o{...}" pour représenter
caractères en octal à la place.

pont "\p{}" propriétés sommes-nous maintenant immunitaire à insensible à la casse assorti

Pour la plupart des propriétés Unicode, cela n'a pas de sens de les faire correspondre différemment sous
"/i" correspondance insensible à la casse. Cela peut conduire à des résultats inattendus et à un potentiel
Trous de sécurité. Par example

m/\p{ASCII_Hex_Digit}+/i

pouvait auparavant correspondre à des caractères non ASCII en raison des règles de correspondance Unicode
(bien qu'il y ait eu plusieurs bugs avec cela). Maintenant, la correspondance sous "/i" donne le même
les résultats ne correspondent pas à "/i", sauf pour les quelques propriétés où les gens sont venus
attendre des différences, à savoir celles où la casse fait partie intégrante de leur sens,
tels que "m/\p{Majuscule}/i" et "m/\p{Lowercase}/i", qui correspondent tous deux au même code
points correspondant à "m/\p{Cased}/i". Les détails sont dans "Propriétés Unicode" dans
perlrecharclass.

Les gestionnaires de propriétés définis par l'utilisateur qui doivent correspondre différemment sous "/i" doivent être modifiés
pour lire le nouveau paramètre booléen qui leur est passé, qui est différent de zéro s'il n'est pas sensible à la casse
la correspondance est en vigueur et 0 sinon. Voir « Propriétés des caractères définis par l'utilisateur » dans
perlunicode.

\p{} implique Unicode sémantique

La spécification d'une propriété Unicode dans le modèle indique que le modèle est destiné à
correspondance selon les règles Unicode, la manière "\N{NOM}" t.

Régulier expressions conserver leur localisation quand interpolé

Les expressions régulières compilées sous « use locale » le conservent désormais lorsqu'elles sont interpolées dans un
nouvelle expression régulière compilée en dehors d'un "use locale", et vice-versa.

Auparavant, une expression régulière interpolée dans une autre héritait de la localisation de
la regex environnante, perdant tout état qu'elle avait à l'origine. Ceci est considéré comme un bug
correctif, mais peut déclencher un code qui repose sur un comportement incorrect.

Stringification of expressions régulières a a changé

Les modificateurs d'expressions régulières par défaut sont désormais notés à l'aide de "(?^...)". Code reposant sur le
l'ancienne stringification échouera. C'est ainsi que lorsque de nouveaux modificateurs sont ajoutés, un tel code
n'aura pas à changer à chaque fois que cela se produit, car la stringification
incorporer automatiquement les nouveaux modificateurs.

Le code qui doit fonctionner correctement avec les expressions régulières de l'ancien et du nouveau style peut éviter tout
problème en utilisant (pour perls depuis 5.9.5; voir re):

utilisez re qw(regexp_pattern);
mon ($pat, $mods) = regexp_pattern($re_ref);

Si la stringification réelle est importante ou si des Perls plus anciens doivent être pris en charge, vous pouvez
utilisez quelque chose comme ce qui suit :

# Accepter à la fois l'ancien et le nouveau style de stringification
mes $modifiers = (qr/foobar/ =~ /\Q(?^/) ? "^" : "-xism";

Et puis utilisez $modifiers au lieu de "-xism".

Run-time code blocs in Standard expressions hériter pragmatique

Les blocs de code dans les expressions régulières ("(?{...})" et "(??{...})") n'héritaient pas auparavant
pragmata (strict, avertissements, etc.) si l'expression régulière a été compilée au moment de l'exécution en tant que
arrive dans des cas comme ces deux:

utiliser re "eval" ;
$foo =~ $bar ; # lorsque $bar contient (?{...})
$foo =~ /$bar(?{ $fini = 1 })/;

Ce bogue a maintenant été corrigé, mais le code qui s'appuyait sur le comportement bogué devra peut-être être
fixé pour tenir compte du comportement correct.

Caches et Forfait Variables
Localisé lié hashes et tableaux sommes-nous aucune aspiré lié

Dans ce qui suit:

attacher @a, ...;
{
local @a ;
# ici, @a est maintenant un nouveau tableau non lié
}
# ici, @a fait à nouveau référence à l'ancien tableau lié

Les versions antérieures de Perl liaient de manière incorrecte le nouveau tableau local. Cela a maintenant été corrigé.
Ce correctif pourrait cependant potentiellement provoquer un changement de comportement de certains codes.

Caches sommes-nous maintenant toujours défini

"defined %Foo ::" renvoie désormais toujours vrai, même si aucun symbole n'a encore été défini dans
ce paquet.

Il s'agit d'un effet secondaire de la suppression d'un problème particulier dans le tokeniser, ajouté pour
5.10.0, pour masquer les effets secondaires des modifications apportées au stockage interne des hachages. Le correctif
réduit considérablement la surcharge mémoire des hachages.

L'appel défini sur un stash est déprécié depuis 5.6.0, averti sur les lexiques depuis
5.6.0, et averti des caches et autres variables de package depuis 5.12.0. "% hachage défini"
a toujours exposé un détail d'implémentation : vider un hachage en supprimant toutes les entrées de
cela ne rend pas "defined %hash" faux. Par conséquent, « % hash défini » n'est pas un code valide pour
déterminer si un hachage arbitraire est vide. Au lieu de cela, utilisez le comportement d'un vide
%hash renvoyant toujours false dans un contexte scalaire.

Clairière cachettes

Affectation de la liste de cachette "%foo :: = ()" utilisée pour rendre la cachette temporairement anonyme pendant qu'elle
était en train d'être vidé. Par conséquent, n'importe lequel de ses sous-programmes référencés ailleurs deviendrait
anonyme, apparaissant comme "(inconnu)" dans "appelant". Ils conservent maintenant leurs noms de package
tel que "l'appelant" renvoie le sous-nom d'origine s'il y a encore une référence à son
typeglob et "foo::__ANON__" sinon [perl #79208].

Déréférencement typesglobs

Si vous affectez un typeglob à une variable scalaire :

$glob = *toto;

le glob qui est copié dans $glob est marqué d'un drapeau spécial indiquant que le glob est
juste une copie. Cela permet aux affectations ultérieures à $glob d'écraser le glob. le
glob d'origine, cependant, est immuable.

Certains opérateurs Perl ne faisaient pas de distinction entre ces deux types de globs. Cela ferait
entraîner un comportement étrange dans les cas extrêmes : "untie $scalar" ne délierait pas le scalaire si
la dernière chose qui lui était assignée était un glob (parce qu'il le traitait comme "untie *$scalar", ce qui
détache une poignée). L'affectation à un emplacement glob (comme "*$glob = \@some_array")
assignez simplement "\@some_array" à $glob.

Pour résoudre ce problème, l'opérateur "*{}" (y compris ses formes *foo et *$foo) a été modifié pour
créer un nouveau glob immuable si son opérande est une copie de glob. Cela permet aux opérateurs qui font
une distinction entre les globs et les scalaires à modifier pour ne traiter que les globs immuables comme
globes. ("tie", "lié" et "détaché" ont été laissés tels quels pour des raisons de compatibilité,
mais avertira. Voir "Dépréciations".)

Cela provoque un changement de code incompatible qui affecte un glob à la valeur de retour de
"*{}" lorsque cet opérateur a reçu une copie globale. Prenons par exemple le code suivant :

$glob = *toto;
*$glob = *bar;

Le *$glob sur la deuxième ligne renvoie un nouveau glob immuable. Ce nouveau glob est fait un
alias à *bar. Ensuite, il est jeté. La deuxième affectation n'a donc aucun effet.

Voirhttp://rt.perl.org/rt3/Public/Bug/Display.html?id=77810> pour plus de détails.

la magie les variables au contrôle le principal paquet

Dans les versions précédentes de Perl, des variables magiques comme $!, %SIG, etc.
paquets. Donc %foo::SIG pourrait être utilisé pour accéder aux signaux, "${"foo::!"}" (avec le mode strict
off) pour accéder au "errno" de C, etc.

Il s'agissait d'un bogue, ou d'une fonctionnalité « non intentionnelle », qui provoquait divers effets néfastes, tels que
les gestionnaires de signaux sont effacés lorsque les modules ont été chargés, etc.

Cela a été corrigé (ou la fonctionnalité a été supprimée, selon la façon dont vous la voyez).

locale($_) bandes tous la magie à partir de $_

locale() sur les variables scalaires leur donne une nouvelle valeur mais conserve toute leur magie intacte. Cette
s'est avéré problématique pour la variable scalaire par défaut $_, où perlsub recommande que
tout sous-programme affecté à $_ doit d'abord le localiser. Cela lèverait une exception
si $_ est un alias vers une variable en lecture seule, et pourrait en général avoir diverses
Effets secondaires.

Par conséquent, comme exception à la règle générale, local($_) n'attribuera pas seulement une nouvelle valeur
à $_, mais également en supprimer toute la magie existante.

Analyse of paquet et variable noms

L'analyse des noms des packages et des variables de package a changé : plusieurs paires adjacentes
des deux-points, comme dans "foo::::bar", sont désormais tous traités comme des séparateurs de paquets.

Indépendamment de ce changement, l'analyse exacte des séparateurs de paquets n'a jamais été
garantie et est sujette à changement dans les futures versions de Perl.

Modifications à Syntaxe or à Perl Les opérateurs
"donné" retourner valeurs

les blocs "donnés" renvoient maintenant la dernière expression évaluée, ou une liste vide si le bloc a été
sorti par "pause". Ainsi vous pouvez maintenant écrire :

mon $type = faire {
donné ($num) {
pause quand undef;
"entier" quand /^[+-]?[0-9]+$/;
"flotter" quand /^[+-]?[0-9]+(?:\.[0-9]+)?$/;
"inconnu";
}
};

Voir "Valeur de retour" dans perlsyn pour plus de détails.

Changer in analyse of certaines prototypes

Les fonctions déclarées avec les prototypes suivants se comportent désormais correctement comme des fonctions unaires :

*
\$ \% \@ \* \&
\[...]
;$ ;*
;\$ ;\% etc...
;\[...]

En raison de cette correction de bogue [perl #75904], les fonctions utilisant les prototypes "(*)", "(;$)" et "(;*)"
sont analysés avec une priorité plus élevée qu'auparavant. Donc dans l'exemple suivant :

sous foo(;$);
foo $a < $b;

la deuxième ligne est maintenant correctement analysée comme "foo($a) < $b", plutôt que "foo($a < $b)".
Cela se produit lorsque l'un de ces opérateurs est utilisé dans un argument sans parenthèse :

< > <= >= lt gt le ge
== != <=> eq ne cmp ~~
&
| ^
&&
|| //
.. ...
?:
= += -= *= etc...
, =>

Correspondance intelligente à opposer à tableau tranches

Auparavant, le code suivant entraînait une correspondance réussie :

mon @a = qw(a y0 z);
mon @b = qw(a x0 z);
@a[0 .. $#b] ~~ @b;

Ce comportement étrange a maintenant été corrigé [perl #77468].

Négation friandises instruments à cordes différemment à partir de avant

L'opérateur de négation unaire, "-", traite désormais les chaînes qui ressemblent à des nombres comme des nombres
[perl #57706].

Négatif zéro

Le zéro négatif (-0.0), lorsqu'il est converti en chaîne, devient désormais "0" sur toutes les plateformes. Ce
utilisé pour devenir "-0" sur certains, mais "0" sur d'autres.

Si vous avez encore besoin de déterminer si un zéro est négatif, utilisez "sprintf("%g", $zero) =~
/^-/" ou le module Data::Float sur CPAN.

" :=" is maintenant a syntaxe erreur

Auparavant "my $pi := 4" était exactement équivalent à "my $pi : = 4", avec le ":" étant
traité comme le début d'une liste d'attributs, se terminant avant le "=". L'utilisation de ":=" pour signifier
" : =" était obsolète dans la version 5.12.0 et constitue désormais une erreur de syntaxe. Cela permet une utilisation future de ":="
comme nouveau jeton.

En dehors des tests du noyau pour cela, nous ne trouvons aucun code Perl 5 sur CPAN utilisant cette construction,
nous pensons donc que ce changement aura peu d'impact sur les bases de code du monde réel.

S'il est absolument nécessaire d'avoir des listes d'attributs vides (par exemple, à cause d'un
générateur de code), évitez simplement l'erreur en ajoutant un espace avant le "=".

Changer in le analyse of Identificateurs

Les caractères en dehors du jeu Unicode "XIDStart" ne sont plus autorisés au début d'un
identifiant. Cela signifie que certains accents et marques qui suivent normalement un ordre alphabétique
caractère ne peut plus être le premier caractère d'un identifiant.

Threads et Processus
Annuaire poignées pas copié à discussions

Sur les systèmes autres que Windows qui n'ont pas de fonction "fchdir", les threads nouvellement créés
n'héritent plus des descripteurs de répertoire de leurs threads parents. De tels programmes seraient
ont généralement planté de toute façon [perl #75154].

"proche" on a partagé la publication de tuyaux

Pour éviter les interblocages, la fonction "close" n'attend plus la sortie du processus fils si
le descripteur de fichier sous-jacent est toujours utilisé par un autre thread. Il retourne vrai dans un tel
Cas.

fourchette() émulation vont pas attendez pour signalé les enfants

Sous Windows, les processus parents ne se termineraient pas tant que tous les enfants forkés ne se seraient pas terminés
première. Cependant, "kill("KILL", ...)" est intrinsèquement instable sur les pseudo-processus, et
"kill("TERM", ...)" peut ne pas être délivré si l'enfant est bloqué dans un appel système.

Pour éviter l'impasse tout en fournissant un mécanisme sûr pour mettre fin au processus d'hébergement,
Perl n'attend désormais plus les enfants qui ont reçu un signal SIGTERM. C'est à
le processus parent pour pid d'attente () pour ces enfants si le traitement du nettoyage des enfants doit être
autorisé à terminer. Cependant, il est alors également de la responsabilité du parent d'éviter la
blocage en s'assurant que le processus fils ne peut pas être bloqué sur les E/S.

Voir perlfork pour plus d'informations sur le fourchette() émulation sous Windows.

Configuration
Nomination correctifs in Politique_sh.SH 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. invalider Politique.sh

Plusieurs fautes de frappe et confusions de noms de longue date dans Politique_sh.SH ont été corrigés,
standardiser sur les noms de variables utilisés dans config.sh.

Cela changera le comportement de Politique.sh si vous avez été accidentellement
s'appuyant sur son comportement incorrect.

Perl source code is lire in texte mode on Windows

Les scripts Perl étaient auparavant lus en mode binaire sous Windows au profit du ByteLoader
module (qui ne fait plus partie du noyau Perl). Cela a eu pour effet secondaire de casser
diverses opérations sur le descripteur de fichier "DATA", y compris chercher()/raconter(), et même simplement
lecture à partir de « DATA » après que les descripteurs de fichiers ont été vidés par un appel à système(), recule,
fourchette() et ainsi de suite

Les options de construction par défaut pour Windows ont été modifiées pour lire le code source Perl sur
Windows en mode texte maintenant. ByteLoader sera (espérons-le) mis à jour sur CPAN pour automatiquement
gérer cette situation [perl #28106].

Dépréciations


Voir aussi "API C obsolètes".

Omettre a espace jusqu'à XNUMX fois a Standard expression et ultérieur mot
Omettre l'espace entre un opérateur d'expression régulière ou ses modificateurs et le
le mot suivant est obsolète. Par exemple, "m/foo/sand $bar" est pour l'instant toujours analysé comme
"m/foo/s et $bar", mais émettra désormais un avertissement.

"\cX"
La construction backslash-c a été conçue comme un moyen de spécifier des caractères non imprimables,
mais il n'y avait aucune restriction (sur les plates-formes ASCII) sur ce que le caractère suivant le
"c" pourrait être. Maintenant, un avertissement de dépréciation est déclenché si ce caractère n'est pas un ASCII
personnage. En outre, un avertissement de dépréciation est émis pour "\c{" (ce qui est le même que simplement
en disant ";").

"\b{" et "\B{"
Dans les expressions régulières, un littéral "{" immédiatement après un "\b" (pas entre crochets
classe de caractères) ou un "\B{" est maintenant obsolète pour permettre son utilisation future par Perl lui-même.

Perl 4-ère .pl bibliothèques
Perl regroupe une poignée de fichiers de bibliothèque antérieurs à Perl 5. Ce regroupement est maintenant
obsolète pour la plupart de ces fichiers, qui sont désormais disponibles sur CPAN. Les fichiers concernés
avertissent maintenant lors de l'exécution, s'ils ont été installés dans le cadre du noyau.

Ceci est un avertissement obligatoire, ne pas obéir -X ou des bits d'avertissement lexicaux. L'avertissement est
calqué sur celui fourni par déprécier.pm pour obsolète-in-core .pm bibliothèques. ça pointe
à la distribution CPAN spécifique qui contient le .pl bibliothèques. Les versions CPAN, de
bien sûr, ne générez pas l'avertissement.

Liste affectation à $[
L'affectation à $[ était dépréciée et commençait à donner des avertissements dans Perl version 5.12.0. Cette
La version de Perl (5.14) émet désormais également un avertissement lors de l'affectation à $[ dans un contexte de liste.
Cela corrige un oubli dans 5.12.0.

Utilisez le of qw (...) as parenthèses
Historiquement, l'analyseur s'est trompé en pensant que les littéraux "qw(...)" étaient toujours
entre parenthèses, et par conséquent vous pouvez parfois omettre les parenthèses autour d'eux :

pour $x qw(abc) { ... }

L'analyseur ne se ment plus de cette façon. Enveloppez la liste littérale entre parenthèses
comme ça:

pour $x (qw(abc)) { ... }

Ceci est obsolète car les parenthèses dans "for $i (1,2,3) { ... }" ne font pas partie
de la syntaxe des expressions. Ils font partie de la syntaxe de l'instruction, avec l'instruction "for"
vouloir des parenthèses littérales. Les parenthèses synthétiques qu'une expression "qw" a acquises
étaient uniquement destinés à être traités dans le cadre de la syntaxe de l'expression.

Notez que cela ne change pas le comportement des cas comme :

utiliser POSIX qw(setlocale localeconv);
notre @EXPORT = qw(foo bar baz);

où les parenthèses n'étaient jamais nécessaires autour de l'expression.

"\N{BELL}"
C'est parce qu'Unicode utilise ce nom pour un caractère différent. Voir "Unicode
La version 6.0 est maintenant prise en charge (principalement)" pour plus d'explications.

"?SCHÉMA?"
"?SCHÉMA?" (sans le "m") initial a été déprécié et produit désormais un avertissement.
C'est pour permettre l'utilisation future de "?" chez les nouveaux opérateurs. La fonctionnalité de correspondance unique est
toujours disponible en tant que "m?PATTERN?".

Cravate fonctions on scalaires tenue typesglobs
L'appel d'une fonction tie ("tie", "lié", "untie") avec un argument scalaire agit sur un
filehandle si le scalaire contient un typeglob.

Il s'agit d'un bogue de longue date qui sera supprimé dans Perl 5.16, car il n'existe actuellement aucun
moyen de lier le scalaire lui-même lorsqu'il contient un typeglob, et aucun moyen de délier un scalaire qui
un typeglob lui a été assigné.

Maintenant, il y a un avertissement de dépréciation chaque fois qu'une fonction tie est utilisée sur un handle sans
"*" explicite.

Défini par l'utilisateur mappage de cas
Cette fonctionnalité est obsolète en raison de ses nombreux problèmes, comme documenté dans « User-Defined
Case Mappings (pour les hackers sérieux uniquement)" dans perlunicode. Cette fonctionnalité sera supprimée dans
Perl 5.16. Utilisez plutôt le module CPAN Unicode::Casing, qui fournit une amélioration
Fonctionnalité.

Obsolète modules
Le module suivant sera supprimé de la distribution principale dans une future version, et
devrait être installé à partir de CPAN à la place. Les distributions sur CPAN qui nécessitent cela devraient ajouter
à leurs conditions préalables. La version principale de ces modules émet désormais une dépréciation
Attention.

Si vous livrez une version packagée de Perl, seule ou dans le cadre d'un système plus vaste, alors
vous devez examiner attentivement les répercussions des dépréciations des modules de base. Vous voudrez peut-être
envisager d'expédier votre version par défaut de Perl avec un package pour le module obsolète
qui s'installe dans les répertoires de la bibliothèque Perl « vendeur » ou « site ». Cela inhibera le
avertissements de dépréciation.

Alternativement, vous pouvez envisager de patcher lib/deprecate.pm fournir une dépréciation
avertissements spécifiques à votre système d'emballage ou à la distribution de Perl, cohérents avec la façon dont
votre système d'emballage ou votre distribution gère une transition par étapes à partir d'une version où le
l'installation d'un seul package fournit la fonctionnalité donnée, à une version ultérieure
où l'administrateur système doit savoir installer plusieurs packages pour obtenir le même
Fonctionnalité.

Vous pouvez faire taire ces avertissements de dépréciation en installant le module en question à partir de CPAN.
Pour installer la dernière version de celui-ci par rôle plutôt que par nom, installez simplement
"Tâche::Dépréciations::5_14".

Développeur ::DProf
Nous vous recommandons fortement d'installer et d'utiliser Devel::NYTProf au lieu de Devel::DProf,
as Devel::NYTProf offre un profilage et des rapports considérablement améliorés.

Performances Améliorations


"En sécurité signaux" optimisation
La répartition du signal a été déplacée de la boucle d'exécution vers les opérations de contrôle. Cela devrait donner quelques
pour cent d'augmentation de la vitesse et élimine presque toutes les pénalités de vitesse causées par le
introduction de "signaux sûrs" au 5.8.0. Les signaux doivent toujours être envoyés dans le
même affirmation qu'auparavant. Si c'est le cas pas arriver, ou si vous le trouvez
possible de créer des boucles ininterrompues, c'est un bogue, et les rapports sont encouragés sur la façon dont
pour recréer de tels problèmes.

Optimisation of décalage() et populaire() en cours sans arguments
Deux PO de moins sont utilisés pour décalage() et populaire() appels sans argument (avec @_ implicite).
Ce changement fait décalage() 5% plus rapide que "shift @_" sur les perls non threadés, et 25% plus rapide
sur les filetés.

Optimisation of regexp moteur un magnifique Comparaison travail
La fonction API "foldEQ_utf8" pour la comparaison de chaînes insensible à la casse (qui est utilisée
fortement par le moteur regexp) a été considérablement remanié et optimisé - et son
documentation bien améliorée en tant que bonus gratuit.

Régulier expression compilation accélérer
La compilation d'expressions régulières a été rendue plus rapide lors de la mise à niveau de l'expression régulière vers utf8 est
nécessaire mais cela n'est pas connu lorsque la compilation commence.

Chaîne ajouter is 100 fois plus rapide
Lors de l'ajout de nombreuses chaînes, les perls construits pour utiliser le "malloc" du système pourraient se terminer
en allouant beaucoup plus de mémoire que nécessaire d'une manière inefficace.

"sv_grow", la fonction utilisée pour allouer plus de mémoire si nécessaire lors de l'ajout à un
chaîne, a appris à arrondir la mémoire qu'il demande à un certain
progression, ce qui la rend beaucoup plus rapide sur certaines plates-formes et configurations. Sous Win32,
c'est maintenant environ 100 fois plus rapide.

Éliminer "PL_*" accesseur fonctions sous fils
Lorsque "MULTIPLICITY" a été développé pour la première fois et que l'état d'interprète est passé à un interprète
Les variables "PL_*" locales de structure, de thread et d'interpréteur ont été définies comme des macros qui appelaient
fonctions d'accesseur (renvoyant l'adresse de la valeur) en dehors du noyau Perl. L'intention
était de permettre aux membres de la structure d'interprétation de changer de taille sans casser le binaire
compatibilité, de sorte que les corrections de bogues puissent être fusionnées dans une branche de maintenance qui nécessitait
un tel changement de taille. Ce mécanisme était redondant et pénalisait le code bien élevé. Il a
été enlevé.

Libération faible
Lorsqu'il existe de nombreuses références faibles à un objet, libérer cet objet peut, dans certains cas,
les circonstances prennent O(N*N) le temps de libérer, où N est le nombre de références. le
les circonstances dans lesquelles cela peut arriver ont été réduites [perl #75254]

Lexical tableau et hachage missions
Une optimisation antérieure pour accélérer les affectations "my @array = ..." et "my %hash = ..."
a causé un bogue et a été désactivé dans Perl 5.12.0.

Nous avons maintenant trouvé un autre moyen d'accélérer ces affectations [perl #82110].

@_ Usages moins Mémoire
Auparavant, @_ était alloué à chaque sous-programme au moment de la compilation avec suffisamment d'espace pour
quatre entrées. Or cette allocation se fait à la demande lorsque le sous-programme est appelé [perl
#72416].

Taille optimisations à SV et HV structures
"xhv_fill" a été éliminé de "struct xpvhv", économisant 1 IV par hachage et sur certains
les systèmes entraîneront l'alignement de "struct xpvhv" sur le cache. Pour éviter cette économie de mémoire
provoquant un ralentissement ailleurs, l'utilisation booléenne de "HvFILL" appelle désormais "HvTOTALKEYS" à la place
(ce qui est équivalent), ainsi, alors que les données de remplissage, lorsqu'elles sont réellement requises, sont désormais calculées sur
demande, les cas où cela doit être fait devraient être rares.

L'ordre des éléments de structure dans les corps SV a changé. En effet, le slot NV a
emplacement échangé avec STASH et MAGIC. Comme tous les accès aux membres SV se font via des macros, cela
doit être complètement transparent. Ce changement permet un gain de place pour les PVHV
documenté ci-dessus, et peut réduire l'allocation de mémoire nécessaire pour les PVIV sur certains
architectures.

"XPV", "XPVIV" et "XPVNV" allouent désormais uniquement les parties du corps "SV" qu'ils
utilisation, économisant de l'espace.

Les scalaires contenant des expressions régulières n'allouent désormais que la partie du corps "SV" qu'ils
utiliser réellement, économisant de l'espace.

Mémoire consommation améliorations à Exportateur
Le @EXPORT_FAIL AV n'est plus créé sauf si nécessaire, donc le typeglob non plus
le soutenant. Cela permet d'économiser environ 200 octets pour chaque package qui utilise Exporter mais ne
utiliser cette fonctionnalité.

Mémoire des économies pour faible
Pour les références faibles, le cas courant d'une seule référence faible par référent a été
optimisé pour réduire le stockage requis. Dans ce cas, cela permet d'économiser l'équivalent d'un
petit tableau Perl par référent.

"%+" et "%-" utilisé moins Mémoire
La majeure partie du module "Tie::Hash::NamedCapture" se trouvait dans le noyau Perl. Il a maintenant
a été déplacé vers un module XS pour réduire la surcharge des programmes qui n'utilisent pas "%+" ou "%-".

Multiple petit améliorations à discussions
Les structures internes du threading font désormais moins d'appels d'API et moins d'allocations,
résultant en un code objet sensiblement plus petit. De plus, de nombreuses vérifications de contexte de thread
ont été différés, ils ne sont donc effectués que si nécessaire (bien que cela ne soit possible que pour les non-
versions de débogage).

Adjacent paires of état suivant codes d'opération sommes-nous maintenant optimisé et
Auparavant, dans un code tel que

utiliser la constante DEBUG => 0 ;

sous GAK {
avertir si DEBUG ;
print "trucs\n" ;
}

les ops pour "avertir si DEBUG" seraient pliés en une op "nulle" ("ex-const"), mais le
L'opération "nextstate" resterait, ce qui entraînerait une expédition d'opération d'exécution de "nextstate",
"état suivant", etc.

L'exécution d'une séquence d'opérations « état suivant » est indiscernable de la dernière
"nextstate" op donc l'optimiseur de judas élimine maintenant le premier d'une paire de "nextstate"
ops sauf lorsque le premier porte une étiquette, car les étiquettes ne doivent pas être éliminées par le
optimiseur, et l'utilisation des étiquettes n'est pas connue de manière concluante au moment de la compilation.

Modules et Pragmatique


New Modules et Pragmatique
· CPAN::Meta::YAML 0.003 a été ajouté en tant que module à double vie. Il prend en charge un sous-ensemble de
YAML suffisant pour lire et écrire META.yml et MYMETA.yml fichiers inclus avec
distributions CPAN ou générées par la chaîne d'outils d'installation du module. Ça ne devrait pas
être utilisé pour toute autre tâche générale d'analyse ou de génération YAML.

· CPAN : : La version 2.110440 de Meta a été ajoutée comme module duel-vie. Il fournit un
bibliothèque standard pour lire, interpréter et écrire des fichiers de métadonnées de distribution CPAN (comme
META.json et META.yml) qui décrivent une distribution, son contenu et les
exigences pour sa construction et son installation. Les dernières métadonnées de distribution CPAN
la spécification est incluse en tant que CPAN::Meta::Spec et des notes sur les modifications apportées au
les spécifications au fil du temps sont données dans CPAN::Meta::History.

· HTTP : : Le minuscule 0.012 a été ajouté comme module duel-vie. C'est un très petit, simple
Client HTTP/1.1 conçu pour les requêtes GET simples et la mise en miroir de fichiers. Il a été
ajouté pour que CPAN.pm et CPANPLUS peut « démarrer » l'accès HTTP au CPAN en utilisant du Perl pur
sans compter sur des binaires externes comme boucle(1) ou wget (1).

· JSON::PP 2.27105 a été ajouté en tant que module à double vie pour permettre aux clients CPAN de lire
META.json fichiers dans les distributions CPAN.

· Module : : Les métadonnées 1.000004 ont été ajoutées en tant que module à double vie. Il rassemble le paquet
et les informations POD des fichiers du module Perl. Il s'agit d'un module autonome basé sur
Module::Build::ModuleInfo à utiliser par d'autres composants de la chaîne d'outils d'installation de module.
Module::Build::ModuleInfo a été déprécié en faveur de ce module à la place.

· Perl::OSType 1.002 a été ajouté en tant que module à double vie. Il mappe le fonctionnement de Perl
noms de système (comme « libellule » ou « MSWin32 ») à des types plus génériques avec
noms (comme « Unix » ou « Windows »). Il a été remanié à partir de Module :: Build et
ExtUtils::CBuilder et consolide ces mappages en un seul emplacement pour faciliter
maintenance.

· Les modules suivants ont été ajoutés par la mise à niveau Unicode::Collate. Voir ci-dessous pour
détails.

Unicode::Assembler::CJK::Big5

Unicode::Assembler::CJK::GB2312

Unicode::Assembler::CJK::JISX0208

Unicode::Assembler::CJK::Coréen

Unicode::Assembler::CJK::Pinyin

Unicode::Assembler::CJK::Stroke

· Version : : La version 0.101020 d'exigences a été ajoutée comme module duel-vie. Ce
fournit une bibliothèque standard pour modéliser et manipule les prérequis et la version du module
contraintes définies dans CPAN::Meta::Spec.

Le kit de préparation mis à jour Modules et Pragma
· les attributs ont été mis à niveau de la version 0.12 à 0.14.

· Archive : : L'extrait a été amélioré de la version 0.38 à 0.48.

Les mises à jour depuis 0.38 incluent : une méthode d'impression sécurisée qui protège Archive::Extract from
devient "$\" ; un correctif pour les tests lorsqu'ils sont exécutés dans le noyau Perl ; prise en charge des fichiers TZ ; une
modification de la logique lzma pour favoriser IO::Uncompress::Unlzma; et un correctif pour un
problème avec NetBSD-current et son nouveau ouvrir(1) exécutable.

· Archive : : Le goudron a été amélioré de la version 1.54 à 1.76.

Les changements importants depuis 1.54 incluent ce qui suit :

· Compatibilité avec les implémentations busybox de goudron (1).

· Un correctif pour que écrire () et créer_archive() fermer uniquement les descripteurs de fichiers eux-mêmes
ouvert.

· Un bogue a été corrigé concernant le code de sortie de extract_archive.

· Le Ptar(1) l'utilitaire a une nouvelle option pour permettre la création sûre d'archives sans
des fichiers inscriptibles dans le monde entier sur Windows, permettant à ces archives d'être téléchargées sur CPAN.

· Un nouveau ptargrep(1) utilitaire pour utiliser des expressions régulières contre le contenu de
fichiers dans une archive tar.

· les en-têtes étendus pax sont maintenant ignorés.

· Attribut::Handlers a été amélioré de la version 0.87 à 0.89.

· autodie a été mis à niveau de la version 2.06_01 à 2.1001.

· AutoLoader a été mis à niveau de la version 5.70 à 5.71.

· Le module B a été mis à niveau de la version 1.23 à 1.29.

Il ne plante plus lors du démontage d'un "y///" contenant des caractères en dehors du
plage d'octets ou compilé dans une portée "use utf8".

La taille de l'objet partagé a été réduite d'environ 40 %, sans
Fonctionnalité.

· B : : Concise a été amélioré de la version 0.78 à 0.83.

B :: Marques concises rv2sv(), rv2av()et la bien-aimée Sonate en la majeur rv2hv() ops avec le nouveau drapeau "OPpDEREF" comme
"DREFed".

Il ne produit plus de sortie mutilée avec le -arbre [perl #80632].

· B::Debug a été amélioré de la version 1.12 à 1.16.

· B::Deparse a été amélioré de la version 0.96 à 1.03.

Le départ d'une opération "nextstate" a changé lorsqu'il a à la fois un changement de package
par rapport à l'état suivant précédent, ou un changement de "%^H" ou d'un autre état et une étiquette.
L'étiquette était auparavant émise en premier, mais est maintenant émise en dernier (5.12.1).

Le "no 5.13.2" ou une forme similaire est maintenant correctement géré par B::Deparse (5.12.3).

B::Deparse gère désormais correctement le code qui applique une correspondance de modèle conditionnelle
contre $_ implicite tel qu'il a été corrigé dans [perl #20444].

Deparsing de "notre" suivi d'une variable avec des caractères amusants (comme autorisé sous
le pragma "use utf8") a également été corrigé [perl #33752].

· B::Lint a été mis à niveau de la version 1.11_01 à 1.13.

· la base a été mise à niveau de la version 2.15 à 2.16.

· Benchmark a été mis à niveau de la version 1.11 à 1.12.

· bignum a été mis à jour de la version 0.23 à 0.27.

· Carp a été mis à niveau de la version 1.15 à 1.20.

Carp détecte maintenant incomplet votre interlocuteur() remplace et évite d'utiliser de faux @DB::args. À
fournir des backtraces, Carp s'appuie sur un comportement particulier du votre interlocuteur() intégré. Carpe
détecte maintenant si un autre code a remplacé cela avec une implémentation incomplète, et
modifie sa trace en conséquence. Des remplacements incomplets auparavant entraîneraient
des valeurs incorrectes dans les backtraces (meilleur cas) ou des erreurs fatales obscures (pire des cas).

Cela corrige certains cas de "Copie bizarre d'ARRAY" causés par des modules surchargés
votre interlocuteur() incorrectement (5.12.2).

Il évite maintenant également d'utiliser des expressions régulières qui obligent Perl à charger son Unicode
tables, afin d'éviter l'erreur "BEGIN not safe after error" qui s'ensuit s'il y a
été une erreur de syntaxe [perl #82854].

· CGI a été mis à niveau de la version 3.48 à 3.52.

Cela fournit les correctifs de sécurité suivants : la limite MIME dans multipart_init() is
maintenant aléatoire et la gestion des nouvelles lignes intégrées dans les valeurs d'en-tête a été améliorée.

· Compress::Raw::Bzip2 a été amélioré de la version 2.024 à 2.033.

Il a été mis à jour pour utiliser bzip2(1) 1.0.6.

· Compress::Raw::Zlib a été amélioré de la version 2.024 à 2.033.

· constant a été mis à niveau de la version 1.20 à 1.21.

Les constantes Unicode fonctionnent à nouveau. Ils sont cassés depuis Perl 5.10.0 [CPAN RT
#67525].

· CPAN a été mis à niveau de la version 1.94_56 à 1.9600.

Principaux faits saillants:

· beaucoup moins de problèmes de dialogue de configuration

· soutien META/MYMETA.json

· prise en charge de local::lib

· prise en charge de HTTP::Tiny pour réduire la dépendance aux sites FTP

· sélection automatique des rétroviseurs

· résoudre tous les bogues connus dans configure_requires

· prise en charge des distributions compressées avec bzip2(1)

· Autoriser Foo/Bar.pm sur la ligne de commande pour signifier "Foo::Bar"

· CPANPLUS a été mis à niveau de la version 0.90 à 0.9103.

Un changement à cpanp-run-perl résout RT #55964
<http://rt.cpan.org/Public/Bug/Display.html?id=55964> et RT #57106
<http://rt.cpan.org/Public/Bug/Display.html?id=57106>, tous deux liés à
échecs d'installation des distributions qui utilisent "Module::Install::DSL" (5.12.2).

Une dépendance sur Config n'a pas été reconnue comme une dépendance du module principal. Cela a été
fixé.

CPANPLUS inclut désormais la prise en charge de META.json et MYMETA.json.

· CPANPLUS::Dist::Build a été amélioré de la version 0.46 à 0.54.

· Données : : Dumper a été amélioré de la version 2.125 à 2.130_02.

L'indentation était désactivée lorsque $Data::Dumper::Terse était défini. Cela a été corrigé
[perl #73604].

Cette mise à niveau corrige également un plantage lors de l'utilisation de fonctions de tri personnalisées pouvant entraîner le
pile à modifier [perl #74170].

Dumpxs ne plante plus avec les globs renvoyés par *$io_ref [perl #72332].

· DB_File a été mis à niveau de la version 1.820 à 1.821.

· DBM_Filter a été mis à niveau de la version 0.03 à 0.04.

· Devel :: DProf a été amélioré de la version 20080331.00 à 20110228.00.

Le simple chargement de Devel::DProf ne déclenche désormais plus le démarrage du profilage. Les deux « utilisent
Devel::DProf" et "perl -d:DProf ..." se comportent comme avant et démarrent le profileur.

REMARQUE: Devel::DProf est obsolète et sera supprimé d'une future version de Perl.
Nous vous recommandons fortement d'installer et d'utiliser Devel::NYTProf à la place, car il offre
le profilage et le reporting considérablement améliorés.

· Devel::Peek a été amélioré de la version 1.04 à 1.07.

· Devel : : SelfStubber a été amélioré de la version 1.03 à 1.05.

· le diagnostic a été mis à jour de la version 1.19 à 1.22.

Il rend maintenant légèrement mieux les liens de pod et a appris à trouver des descriptions pour
messages qui partagent leurs descriptions avec d'autres messages.

· Digest::MD5 a été amélioré de la version 2.39 à 2.51.

Il est maintenant sûr d'utiliser ce module en combinaison avec des threads.

· Condensé : : SHA a été mis à niveau de la version 5.47 à 5.61.

"shasum" imite maintenant plus étroitement sha1sum(1) /md5sum (1).

"addfile" accepte tous les noms de fichiers POSIX.

Nouvelles transformations SHA-512/224 et SHA-512/256 (réf. NIST Draft FIPS 180-4 [février
dix])

· DirHandle a été mis à niveau de la version 1.03 à 1.04.

· Dumpvalue a été mis à niveau de la version 1.13 à 1.16.

· DynaLoader a été mis à niveau de la version 1.10 à 1.13.

Il corrige un débordement de buffer lors de la transmission d'un nom de fichier très long.

Il n'hérite plus d'AutoLoader ; par conséquent, il ne produit plus d'erreur étrange
messages pour les appels de méthode infructueux sur les classes qui héritent de DynaLoader [perl
#84358].

· Encode a été mis à niveau de la version 2.39 à 2.42.

Désormais, les 66 non-caractères Unicode sont traités de la même manière que U+FFFF a toujours été
traité : dans les cas où il a été refusé, tous les 66 sont refusés, et dans les cas où il
prévenu, tous les 66 préviennent.

· Env a été mis à niveau de la version 1.01 à 1.02.

· Errno a été mis à niveau de la version 1.11 à 1.13.

L'implémentation d'Errno a été remaniée pour utiliser environ 55% de mémoire en moins.

Sur certaines plates-formes avec des fichiers d'en-tête inhabituels, comme Win32 gcc(1) en utilisant "mingw64"
en-têtes, certaines constantes qui n'étaient pas réellement des numéros d'erreur ont été exposées par
Errno. Cela a été corrigé [perl #77416].

· L'exportateur a été mis à niveau de la version 5.64_01 à 5.64_03.

L'exportateur ne remplace plus $SIG{__WARN__} [perl #74472]

· ExtUtils::CBuilder a été mis à niveau de la version 0.27 à 0.280203.

· ExtUtils::Command a été mis à niveau de la version 1.16 à 1.17.

· ExtUtils::Constant a été amélioré de 0.22 à 0.23.

Le code d'aide AUTOLOAD généré par "ExtUtils::Constant::ProxySubs" peut maintenant crever()
pour les constantes manquantes, ou générer un sous-programme "AUTOLOAD" complet dans XS, permettant
simplification de nombreux modules qui l'utilisent (Fcntl, File::Glob, GDBM_File,
I18N :: Langinfo, POSIX, Socket).

ExtUtils::Constant::ProxySubs peut désormais éventuellement pousser les noms de toutes les constantes sur
le paquet @EXPORT_OK.

· ExtUtils::Install a été mis à niveau de la version 1.55 à 1.56.

· ExtUtils::MakeMaker a été mis à niveau de la version 6.56 à 6.57_05.

· ExtUtils::Le manifeste a été amélioré de la version 1.57 à 1.58.

· ExtUtils::ParseXS a été mis à niveau de la version 2.21 à 2.2210.

· Fcntl a été mis à niveau de la version 1.06 à 1.11.

· File::Basename a été amélioré de la version 2.78 à 2.82.

· Fichier : : CheckTree a été amélioré de la version 4.4 à 4.41.

· Fichier : : La copie a été mise à niveau de la version 2.17 à 2.21.

· Fichier::DosGlob a été mis à niveau de la version 1.01 à 1.04.

Il autorise les motifs contenant des parenthèses littérales : ils n'ont plus besoin d'être échappés.
Sous Windows, il n'ajoute plus de supplément ./ aux noms de fichiers renvoyés lorsque le motif est un
glob relatif avec une spécification de lecteur, comme C:*.pl [perl #71712].

· File::Fetch a été amélioré de la version 0.24 à 0.32.

HTTP::Lite est désormais pris en charge pour le schéma "http".

L'exposition rapporter(1) l'utilitaire est pris en charge sur FreeBSD, NetBSD et Dragonfly BSD pour le "http"
et les schémas "ftp".

· Fichier::Find a été amélioré de la version 1.15 à 1.19.

Il améliore la gestion des barres obliques inverses sous Windows, de sorte que les chemins comme C:\dir\/fichier ne sont
plus généré [perl #71710].

· File::Glob a été mis à niveau de la version 1.07 à 1.12.

· Fichier::Spec a été amélioré de la version 3.31 à 3.33.

Plusieurs correctifs de portabilité ont été apportés dans File::Spec::VMS : un deux-points est maintenant reconnu comme un
délimiteur dans les spécifications de fichier natives ; les délimiteurs avec échappement caret sont reconnus pour une meilleure
gestion des spécifications de fichiers étendues ; chemin de chat() renvoie un répertoire vide plutôt que le
répertoire courant si le nom du répertoire d'entrée est vide ; et abs2rel() gère correctement
Entrée de style Unix (5.12.2).

· File::stat a été amélioré de 1.02 à 1.05.

Les opérateurs de test de fichier "-x" et "-X" fonctionnent désormais correctement lorsqu'ils sont exécutés par le superutilisateur.

· Filtre : : Simple a été amélioré de la version 0.84 à 0.86.

· GDBM_File a été mis à niveau de 1.10 à 1.14.

Cela corrige une fuite de mémoire lors de l'utilisation de filtres DBM.

· Hash::Util a été amélioré de 0.07 à 0.11.

Hash::Util n'émet plus de faux avertissements "non initialisés" lors du verrouillage récursif
hachages qui ont des valeurs indéfinies [perl #74280].

· Hash::Util::FieldHash a été amélioré de la version 1.04 à 1.09.

· I18N::Collate a été amélioré de la version 1.01 à 1.02.

· I18N::Langinfo a été amélioré de la version 0.03 à 0.08.

infolangue() utilise maintenant par défaut $_ s'il n'y a pas d'argument donné, tout comme le
la documentation a toujours réclamé.

· I18N::LangTags a été amélioré de la version 0.35 à 0.35_01.

· si a été mis à niveau de la version 0.05 à 0.0601.

· IO a été mis à niveau de la version 1.25_02 à 1.25_04.

Cette version d'IO inclut un nouveau IO::Select, qui autorise désormais les objets IO::Handle (et
objets dans les classes dérivées) à supprimer d'un ensemble IO::Select même si le
le descripteur de fichier sous-jacent est fermé ou invalide.

· IPC::Cmd a été amélioré de la version 0.54 à 0.70.

Résout un problème de division des lignes de commande Win32. Un argument composé de la
le seul caractère "0" était omis (CPAN RT #62961).

· IPC : : Open3 a été amélioré de 1.05 à 1.09.

ouvrir3() produit maintenant une erreur si l'appel "exec" échoue, permettant à cette condition d'être
distingué d'un processus enfant qui s'est terminé avec un statut différent de zéro [perl #72016].

L'interne XFermer() routine sait maintenant comment gérer les descripteurs de fichiers comme documenté,
donc dupliquer "STDIN" dans un processus enfant à l'aide de son descripteur de fichier fonctionne maintenant [perl
#76474].

· IPC : : SysV a été amélioré de la version 2.01 à 2.03.

· lib a été mis à niveau de la version 0.62 à 0.63.

· Paramètres régionaux : : Maketext a été mis à niveau de la version 1.14 à 1.19.

Locale::Maketext prend désormais en charge les caches externes.

Cette mise à jour corrige également une boucle infinie dans "Locale::Maketext::Guts::_compile()" lorsque
travailler avec des valeurs entachées (CPAN RT #40727).

"-> maketext" appelle maintenant la sauvegarde et la restauration de $@ afin que les messages d'erreur ne soient pas supprimés
(CPANRT #34182).

· Log::Message a été mis à niveau de la version 0.02 à 0.04.

· Log::Message::Simple a été amélioré de la version 0.06 à 0.08.

· Math::BigInt a été amélioré de la version 1.89_01 à 1.994.

Cela corrige, entre autres, les résultats incorrects lors du calcul des coefficients binomiaux
[perl #77640].

Cela empêche également "sqrt($int)" de planter sous "use bigrat". [perl #73534].

· Math::BigInt::FastCalc a été amélioré de la version 0.19 à 0.28.

· Math::BigRat a été amélioré de la version 0.24 à 0.26_02.

· Memoize a été mis à niveau de la version 1.01_03 à 1.02.

· MIME : : Base64 a été amélioré de 3.08 à 3.13.

Inclut de nouvelles fonctions pour calculer la longueur des chaînes base64 codées et décodées.

Fournit maintenant encode_base64url() et décodage_base64url() fonctions pour traiter la base64
schéma pour les « applications URL ».

· Module : : La construction a été améliorée de la version 0.3603 à 0.3800.

Un changement notable est la dépréciation de plusieurs modules. Module::Build::Version a
a été dépréciée et Module::Build s'appuie désormais directement sur la version pragma.
Module::Build::ModuleInfo a été déprécié au profit d'une copie autonome appelée
Module :: Métadonnées. Module::Build::YAML a été déprécié au profit de
CPAN :: Meta :: YAML.

Module :: Build maintenant génère également META.json et MYMETA.json dossiers conformément à
version 2 de la spécification des métadonnées de distribution CPAN, CPAN::Meta::Spec. le
ancien format META.yml et MYMETA.yml les fichiers sont toujours générés.

· Module : : CoreList a été mis à niveau de la version 2.29 à 2.47.

En plus de répertorier les modules de base mis à jour de cette version, il arrête également de répertorier les
Module "Fichier". Ce module n'a jamais existé dans le noyau. Les scripts générant
Module::CoreList l'a confondu avec VMS::Filespec, qui est en fait un module de base à partir de
Perle 5.8.7.

· Module : : La charge a été améliorée de la version 0.16 à 0.18.

· Module::Load::Conditional a été amélioré de la version 0.34 à 0.44.

· Le mro pragma a été mis à jour de la version 1.02 à 1.07.

· NDBM_File a été mis à niveau de la version 1.08 à 1.12.

Cela corrige une fuite de mémoire lors de l'utilisation de filtres DBM.

· Net::Ping a été amélioré de la version 2.36 à 2.38.

· NEXT a été mis à niveau de la version 0.64 à 0.65.

· Objet : : Accessor a été amélioré de la version 0.36 à 0.38.

· ODBM_File a été mis à niveau de la version 1.07 à 1.10.

Cela corrige une fuite de mémoire lors de l'utilisation de filtres DBM.

· Opcode a été mis à niveau de la version 1.15 à 1.18.

· Le pragma de surcharge a été amélioré de 1.10 à 1.13.

"overload::Method" peut maintenant gérer des sous-programmes qui sont eux-mêmes bénis dans
classes surchargées [perl #71998].

La documentation s'est grandement améliorée. Voir "Documentation" ci-dessous.

· Params::Check a été amélioré de la version 0.26 à 0.28.

· Le pragma parent a été mis à niveau de la version 0.223 à 0.225.

· Parse::CPAN::Meta a été amélioré de la version 1.40 à 1.4401.

Le dernier Parse::CPAN::Meta peut désormais lire les fichiers YAML et JSON à l'aide de CPAN::Meta::YAML
et JSON::PP, qui font maintenant partie du noyau Perl.

· PerlIO::encoding a été amélioré de la version 0.12 à 0.14.

· PerlIO::scalar a été amélioré de 0.07 à 0.11.

A lis() après l'entraînement chercher() au-delà de la fin de la chaîne ne pense plus avoir de données à
lire [perl #78716].

· PerlIO::via a été amélioré de la version 0.09 à 0.11.

· Pod::Html a été mis à niveau de la version 1.09 à 1.11.

· Pod::LaTeX a été amélioré de la version 0.58 à 0.59.

· Pod : : Perldoc a été amélioré de la version 3.15_02 à 3.15_03.

· Pod : : Simple a été amélioré de la version 3.13 à 3.16.

· POSIX a été mis à niveau de 1.19 à 1.24.

Il inclut désormais des constantes pour les constantes de signal POSIX.

· Le re pragma a été mis à jour de la version 0.11 à 0.18.

Le sous-pragma "use re '/flags'" est nouveau.

L'exposition regmus() fonction utilisée pour planter lorsqu'elle est appelée sur une expression régulière appartenant à
un moteur enfichable. Maintenant, il croasse à la place.

regmus() ne perd plus de mémoire.

· Safe a été mis à niveau de la version 2.25 à 2.29.

Références de code renvoyées par revalor() et refaire() sont maintenant enveloppés via wrap_code_refs() (5.12.1).

Cela corrige une boucle infinie possible lors de la recherche de références de code.

Il ajoute plusieurs routines "version::vxs::*" au partage par défaut.

· SDBM_File a été mis à niveau de la version 1.06 à 1.09.

· SelfLoader a été mis à niveau de 1.17 à 1.18.

Il fonctionne maintenant en mode taint [perl #72062].

· Le pragma sigtrap a été mis à niveau de la version 1.04 à 1.05.

Il n'essaie plus de modifier les arguments en lecture seule lors de la génération d'un backtrace [perl
#72340].

· Socket a été mis à niveau de la version 1.87 à 1.94.

Voir « Prise en charge IPv6 améliorée » ci-dessus.

· Stockable a été mis à niveau de la version 2.22 à 2.27.

Inclut l'amélioration des performances pour les classes surchargées.

Cela ajoute la prise en charge de la sérialisation des références de code qui contiennent des chaînes UTF-8
correctement. Le numéro de version mineure stockable a changé en conséquence, ce qui signifie que
Les utilisateurs enregistrables qui définissent $Storable::accept_future_minor sur une valeur "FALSE" verront
erreurs (voir « COMPATIBILITÉ FORWARD » dans Stockable pour plus de détails).

La congélation n'est plus confuse si la pile Perl est réaffectée pendant la congélation
[perl #80074].

· Sys::Hostname a été amélioré de la version 1.11 à 1.16.

· Terme : : ANSIColor a été amélioré de la version 2.02 à 3.00.

· Terme : : L'interface utilisateur a été mise à niveau de la version 0.20 à 0.26.

· Test::Le harnais a été amélioré de la version 3.17 à 3.23.

· Test : : Simple a été amélioré de la version 0.94 à 0.98.

Parmi beaucoup d'autres choses, les sous-tests sans "plan" ou "no_plan" ont maintenant un
done_testing() ajouté à eux.

· Fil : : Le sémaphore a été amélioré de la version 2.09 à 2.12.

Il fournit deux nouvelles méthodes qui donnent plus de contrôle sur la décrémentation de
sémaphores : "down_nb" et "down_force".

· Thread::La file d'attente a été améliorée de la version 2.11 à 2.12.

· Le pragma des threads a été mis à jour de la version 1.75 à 1.83.

· Le threads::shared pragma a été amélioré de la version 1.32 à 1.37.

· Cravate : : Le hachage a été amélioré de la version 1.03 à 1.04.

L'appel de "Tie::Hash->TIEHASH()" était utilisé en boucle pour toujours. Maintenant, ça "coasse".

· Cravate::Hash::NamedCapture a été amélioré de la version 0.06 à 0.08.

· Lien : : RefHash a été amélioré de la version 1.38 à 1.39.

· Temps : : HiRes a été amélioré de la version 1.9719 à 1.9721_01.

· Temps : : Local a été amélioré de la version 1.1901_01 à 1.2000.

· Temps : : La pièce a été améliorée de la version 1.15_01 à 1.20_01.

· Unicode::Collate a été mis à niveau de la version 0.52_01 à 0.73.

Unicode::Collate a été mis à jour pour utiliser Unicode 6.0.0.

Unicode::Collate::Locale prend désormais en charge une pléthore de nouvelles locales : ar être, BG,
de__annuaire, hein, HY, cc, mec, non, om, tn, vous, heure, je, oui, ok, ru, m², si monsieur à,
Royaume-Uni, zh, zh__big5han, zh__gb2312han, zh__pinyinet la bien-aimée Sonate en la majeur zh__accident vasculaire cérébral.

Les modules suivants ont été ajoutés :

Unicode::Collate::CJK::Big5 pour "zh__big5han", ce qui permet de personnaliser CJK Unified
Idéogrammes dans l'ordre du big5han du CLDR.

Unicode::Collate::CJK::GB2312 pour "zh__gb2312han" qui permet de personnaliser CJK Unified
Idéogrammes dans l'ordre de l'ordre gb2312han du CLDR.

Unicode::Collate::CJK::JISX0208 qui permet la personnalisation de 6355 kanji (CJK Unified
Idéogrammes) dans l'ordre JIS X 0208.

Unicode::Collate::CJK::Korean qui permet de personnaliser les idéogrammes unifiés CJK dans le
ordre de la commande coréenne du CLDR.

Unicode::Collate::CJK::Pinyin pour "zh__pinyin" qui permet de personnaliser CJK Unified
Idéogrammes dans l'ordre du pinyin du CLDR.

Unicode::Collate::CJK::Stroke pour "zh__stroke" qui permet la personnalisation de CJK Unified
Idéogrammes dans l'ordre de l'ordre des traits du CLDR.

Cela voit également le passage de l'utilisation de la version pure-Perl de ce module au XS
version.

· Unicode::Normalize a été amélioré de la version 1.03 à 1.10.

· Unicode::UCD a été amélioré de la version 0.27 à 0.32.

Une nouvelle fonction, Unicode::UCD::num(), a été ajouté. Cette fonction renvoie le
valeur numérique de la chaîne qui lui a été transmise ou "undef" si la chaîne dans son intégralité n'a pas
valeur numérique "sûre". (Pour plus de détails et pour la définition de "sûr", voir "nombre()"
en Unicode::UCD.)

Cette mise à niveau inclut également plusieurs corrections de bugs :

charinfo()
· Il est maintenant mis à jour vers la version Unicode 6.0.0 avec Corrigendum #8, à l'exception
que, tout comme avec Perl 5.14, le point de code en U+1F514 n'a pas de nom.

· Les points de code des syllabes Hangul ont les noms corrects et leurs décompositions
sont toujours générés sans nécessiter l'installation de Lingua::KO::Hangul::Util.

· CJK (chinois-japonais-coréen) points de code U+2A700 à U+2B734 et U+2B740 à
U+2B81D sont désormais correctement gérés.

· Les valeurs numériques sont maintenant sorties pour les points de code CJK qui les contiennent.

· Les noms de sortie pour les points de code avec plusieurs alias sont maintenant ceux corrigés.

carscript()
Cela renvoie désormais correctement "Unknown" au lieu de "undef" pour le script d'un code
point qui n'a pas été attribué à un autre.

bloc de caractères()
Cela renvoie désormais correctement "No_Block" au lieu de "undef" pour le bloc d'un code
point qui n'a pas été attribué à un autre.

· Le pragma de version a été mis à jour de 0.82 à 0.88.

A cause d'un bogue, maintenant corrigé, le est_strict() et est_lax() les fonctions ne fonctionnaient pas lorsque
exporté (5.12.1).

· Le pragma des avertissements a été mis à jour de la version 1.09 à 1.12.

Appeler "utiliser les avertissements" sans arguments est maintenant beaucoup plus efficace.

· Le pragma warnings::register a été mis à jour de la version 1.01 à 1.02.

Il est maintenant possible d'enregistrer des catégories d'avertissement autres que les noms de packages
en utilisant warnings::register. Voir perllex avertir(1) pour plus d'informations.

· XSLoader a été mis à niveau de la version 0.10 à 0.13.

· VMS::DCLsym a été mis à jour de la version 1.03 à 1.05.

Deux bugs ont été corrigés [perl #84086] :

Le nom de la table de symboles a été perdu lors de la liaison d'un hachage, en raison d'une réflexion dans "TIEHASH". le
le résultat était que tous les hachages liés interagissaient avec la table de symboles locale.

A moins qu'un nom de table de symboles n'ait été explicitement spécifié dans l'appel au
constructeur, l'interrogation de la clé spéciale ":LOCAL" n'a pas permis d'identifier les objets connectés à
la table des symboles locaux.

· Le module Win32 a été mis à jour de la version 0.39 à 0.44.

Cette version a plusieurs nouvelles fonctions : Win32 :: GetSystemMetrics(),
Win32 :: GetProductInfo (), Win32 :: GetOSDisplayName().

Les noms renvoyés par Win32 :: GetOSName() et Win32 :: GetOSDisplayName() sont considérés
corrigée.

· XS : : Typemap a été amélioré de la version 0.03 à 0.05.

Supprimé Modules et Pragmatique
Comme promis dans les notes de version de Perl 5.12.0, les modules suivants ont été supprimés de
la distribution principale et, si nécessaire, doit être installé à partir de CPAN à la place.

· Class::ISA a été supprimé du noyau Perl. La version précédente était 0.36.

· Pod::Plainer a été supprimé du noyau Perl. La version précédente était la 1.02.

· Switch a été supprimé du noyau Perl. La version précédente était la 2.16.

La suppression de Shell a été reportée après la version 5.14, car la mise en œuvre de Shell
livré avec 5.12.0 n'a pas émis correctement l'avertissement indiquant qu'il devait être supprimé de
au coeur.

Documentation


New Documentation
perlgpl

perlgpl a été mis à jour pour contenir la version 1 de la GPL, comme cela est inclus dans le README
distribué avec Perl (5.12.1).

Perl 5.12.x delta fichiers

Les fichiers perldelta pour Perl 5.12.1 à 5.12.3 ont été ajoutés depuis la branche maintenance :
perl5121delta, perl5122delta, perl5123delta.

style perlpod

Nouveau guide de style pour la documentation POD, principalement séparé de la section NOTES du
pod2man(1) page de manuel.

perlsource, perlinterp, perlhacktut, et astuces perlhack

Voir "refonte de perlhack et perlrepository", ci-dessous.

Modifications à Existant Documentation
perlmodlib is maintenant complet

La page de manuel perlmodlib fournie avec Perl 5.12.0 manquait plusieurs modules en raison d'un bogue
dans le script qui génère la liste. Cela a été corrigé [perl #74332] (5.12.1).

remplacer incorrect tr/// table in perlebcdic

perlebcdic contient une table utile à utiliser dans "tr///" pour convertir entre EBCDIC et
Latin1/ASCII. Le tableau était l'inverse de celui qu'il décrit, bien que le code qui
utilisé le tableau a fonctionné correctement pour l'exemple spécifique donné.

Le tableau a été corrigé et l'exemple de code modifié pour correspondre.

Le tableau a également été changé en hexadécimal d'octal, et les recettes du module ont été
modifié pour imprimer les zéros non significatifs afin que toutes les valeurs aient la même longueur.

Astuces pour défini par l'utilisateur boîtier

perlunicode contient maintenant une explication sur la façon de remplacer, de mutiler et de modifier autrement le
manière dont Perl gère les conversions en majuscules, minuscules et autres sur les données Unicode, et comment
fournir des modifications étendues pour modifier le comportement de son propre code sans écraser personne
d'autre.

INSTALLER explicitement Etats qui Perl a besoin a C89 compilateur

C'était déjà vrai, mais c'est maintenant officiellement indiqué pour l'enregistrement (5.12.2).

Explication of "\xHH" et "\oOOO" s'échappe

perlop a été mis à jour avec une explication plus détaillée de ces deux caractères d'échappement.

-0NNN interrupteur

Dans perlrun, le comportement du -0NNN passer pour - 0400 ou supérieur a été clarifié
(5.12.2).

Entretien politique

perlpolicy contient maintenant la politique sur les correctifs acceptables pour les branches de maintenance
(5.12.1).

Désapprobation politique

perlpolicy contient désormais la politique de compatibilité et de dépréciation ainsi que des définitions
de termes comme "dépréciation" (5.12.2).

New descriptions in perldiag

Les diagnostics existants suivants sont désormais documentés :

· Utilisation ambiguë de %c résolue en tant qu'opérateur %c

· Utilisation ambiguë de %c{%s} résolue en %c%s

· Utilisation ambiguë de %c{%s[...]} résolue en %c%s[...]

· Utilisation ambiguë de %c{%s{...}} résolue en %c%s{...}

· Utilisation ambiguë de -%s résolue comme -&%s()

· Format de version strict non valide (%s)

· Format de version invalide (%s)

· Objet de version invalide

livre perl

perlbook a été étendu pour couvrir de nombreux livres plus populaires.

"SvVRAI" macro

La documentation de la macro "SvTRUE" dans perlapi avait tout simplement tort de déclarer que get-
la magie n'est pas traitée. Il a été corrigé.

op manipulation fonctions

Plusieurs fonctions API qui traitent les optrees ont été nouvellement documentées.

perlvar réorganiser

perlvar réorganise les variables et les regroupe par sujet. Chaque variable introduite après
Perl 5.000 note la première version dans laquelle il est disponible. perlvar a également un nouveau
section pour les variables obsolètes pour noter quand elles ont été supprimées.

tableau et hachage tranches in scalaire aux contextes

Ceux-ci sont maintenant documentés dans perldata.

"utilisation lieu" et formats

perlform et perllocale ont été corrigés pour indiquer que "use locale" affecte les formats.

surcharge

la documentation de surcharge a pratiquement subi une réécriture. C'est maintenant beaucoup plus
direct et clair.

perlhack et référentiel perl réorganiser

Le document perlhack est maintenant beaucoup plus court et se concentre sur le processus de développement de Perl 5
et soumettre des correctifs à Perl. Le contenu technique a été déplacé vers plusieurs nouveaux
documents, perlsource, perlinterp, perlhacktut et perlhacktips. Ce contenu technique
n'a été que légèrement modifié.

Le document perlrepository a été renommé en perlgit. Ce nouveau document n'est qu'un
à utiliser git avec le code source Perl. Tout autre contenu qui figurait auparavant dans
perlrepository a été déplacé vers perlhack.

Montre exemples

Les exemples dans perlfaq4 ont été mis à jour pour montrer l'utilisation de Time::Piece.

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

Prototype de fermeture appelé
Cette erreur se produit lorsqu'une référence de sous-programme transmise à un gestionnaire d'attributs est
appelé, si le sous-programme est une fermeture [perl #68560].

Propriété définie par l'utilisateur non sécurisée %s
Perl a détecté des données entachées lors d'une tentative de compilation d'une expression régulière contenant un
appel à une fonction de propriété de caractère définie par l'utilisateur, signifiant "\p{IsFoo}" ou
"\p{InFoo}". Voir « Propriétés des caractères définis par l'utilisateur » dans perlunicode et perlsec.

panique : gp_free n'a pas réussi à libérer le pointeur glob - quelque chose recrée à plusieurs reprises des entrées
Cette nouvelle erreur est déclenchée si un destructeur appelle un objet dans un typeglob qui est
être libéré crée une nouvelle entrée de typeglob contenant un objet avec un destructeur qui
crée une nouvelle entrée contenant un objet, etc.

Erreur interne de code d'analyse (%s)
Cette nouvelle erreur fatale est produite lorsque l'analyse du code fourni par une extension viole
l'API de l'analyseur de manière détectable.

refcnt : fd %d%s
Cette nouvelle erreur se produit uniquement si une vérification de cohérence interne échoue lorsqu'un canal est sur le point de
à fermer.

Le modificateur d'expression régulière "/%c" ne peut pas apparaître deux fois
Le modèle d'expression régulière a l'un des modificateurs mutuellement exclusifs répétés.

Les modificateurs d'expression régulière "/%c" et "/%c" s'excluent mutuellement
Le modèle d'expression régulière a plus d'un des modificateurs mutuellement exclusifs.

Utiliser !~ avec %s n'a pas de sens
Cette erreur se produit lorsque "!~" est utilisé avec "s///r" ou "y///r".

New Avertissements

"\b{" est obsolète ; utilisez "\b\{" à la place
"\B{" est obsolète ; utilisez "\B\{" à la place
L'utilisation d'un "{" non échappé immédiatement après un "\b" ou "\B" est désormais obsolète dans
afin de réserver son utilisation à Perl lui-même dans une future version.

L'opération "%s" renvoie son argument pour ...
Exécution d'une opération nécessitant la sémantique Unicode (telle que le pliage de casse) sur un
Un substitut Unicode ou un caractère non Unicode déclenche désormais cet avertissement.

L'utilisation de qw(...) comme parenthèses est obsolète
Voir "Utilisation de qw(...) comme parenthèses", ci-dessus, pour plus de détails.

Modifications à Existant Diagnostics
· L'avertissement "La variable $foo n'est pas importée" qui précède une erreur "strict 'vars'" a
maintenant été affecté à la catégorie "divers", de sorte que "aucun avertissement" ne la supprimera [perl
#73712].

· avertir() et mourir() produit maintenant des avertissements "Caractère large" lorsqu'il est alimenté avec un personnage à l'extérieur
la plage d'octets si "STDERR" est un handle de taille d'octet.

· Le message d'erreur "La couche ne correspond pas à ce perl" a été remplacé par ces plus
messages utiles [perl #73754] :

· La taille de la table de fonction de la couche PerlIO (%d) ne correspond pas à la taille attendue par ce perl
(%ré)

· La taille de l'instance de la couche PerlIO (%d) ne correspond pas à la taille attendue par ce perl (%d)

· L'avertissement "Trouvé = au conditionnel" qui est émis lorsqu'une constante est affectée à un
variable dans une condition est maintenant retenue si la constante est en fait un sous-programme ou
une générée par "use constant", car la valeur de la constante peut ne pas être connue à
l'heure à laquelle le programme est écrit [perl #77762].

· Auparavant, si aucun des gethostbyaddr (), gethostbyname () et gethostent() fonctions
étaient implémentés sur une plate-forme donnée, ils mourraient tous avec le message "Unsupported
fonction socket 'gethostent' appelée", avec des messages analogues pour getnet*() et
getserv*(). Cela a été corrigé.

· Le message d'avertissement concernant les échappements d'expressions régulières non reconnus a été
a été modifié pour inclure tout "{" littéral après l'échappement à deux caractères. Pour
exemple, "\q{" est maintenant émis au lieu de "\q".

Services Publics Modifications


bug perl(1)

· perlbug recherche maintenant dans la variable d'environnement EMAIL une adresse de retour si le REPLY-
Les variables TO et REPLYTO sont vides.

· perlbug n'a pas généré auparavant d'en-tête "From:", ce qui pourrait entraîner une suppression
poster; il inclut maintenant cet en-tête.

· L'adresse de l'utilisateur est maintenant utilisée comme Return-Path.

De nos jours, de nombreux systèmes n'ont pas de nom de domaine Internet valide, et [email protected]
n'accepte pas les e-mails avec un chemin de retour qui ne se résout pas. Donc l'adresse de l'utilisateur
est maintenant transmis à sendmail afin qu'il soit moins susceptible de rester coincé dans une file d'attente de courrier quelque part
[perl #82996].

· perlbug donne maintenant toujours au journaliste une chance de changer l'adresse e-mail qu'il devine
pour eux (5.12.2).

· perlbug ne devrait plus avertir des valeurs non initialisées lors de l'utilisation du -d et -v
choix (5.12.2).

perl5db.pl

· Le terminal distant fonctionne après le fork et génère de nouvelles sessions, une par fork
processus.

ptargrep

· ptargrep est un nouvel utilitaire pour appliquer la correspondance de motifs au contenu des fichiers dans un tar
archiver. Il est livré avec "Archive::Tar".

Configuration et Compilation


Voir aussi « Les correctifs de nommage dans Policy_sh.SH peuvent invalider Policy.sh », ci-dessus.

· CCINCDIR et CCLIBDIR pour le compilateur croisé mingw64 sont maintenant correctement sous
$(CCHOME)\mingw\include et \lib plutôt qu'immédiatement en dessous $(CCHOME).

Cela signifie "incpath", "libpth", "ldflags", "lddlflags" et "ldflags_nolargefiles"
Valeurs dans Config.pm et Config_heavy.pl sont maintenant réglés correctement.

· "make test.valgrind" a été ajusté pour tenir compte de cpan/dist/ext séparation.

· Sur les compilateurs qui le supportent, -Wwrite-chaînes est maintenant ajouté aux cflags par défaut.

· Le module Encode peut maintenant (une fois de plus) être inclus dans une construction Perl statique. le
la gestion des cas spéciaux pour cette situation a été interrompue dans Perl 5.11.0, et a maintenant été
réparé.

· La taille par défaut précédente d'un tampon PerlIO (4096 octets) a été augmentée à la
plus grand de 8192 octets et votre BUFSIZ local. Les repères montrent que le doublement de ce
une valeur par défaut vieille de dix ans augmente les performances de lecture et d'écriture d'environ 25 % à 50 % lorsque
en utilisant les couches par défaut de perlio sur unix. Pour choisir une taille autre que celle par défaut, telle que
pour récupérer l'ancienne valeur ou pour obtenir une valeur encore plus grande, configurez avec :

./Configurer -Accflags=-DPERLIOBUF_DEFAULT_BUFSIZ=N

où N est la taille souhaitée en octets ; il devrait probablement s'agir d'un multiple de votre page
Taille.

· Une erreur "types d'opérandes incompatibles" dans les expressions ternaires lors de la construction avec
"clang" a été corrigé (5.12.2).

· Perl ignore désormais les tests setuid File::Copy sur les partitions qu'il détecte montées en tant que "nosuid"
(5.12.2).

Plateforme Assistance


New Plateformes
AIX Perl s'appuie désormais sur AIX 4.2 (5.12.1).

Discontinus Plateformes
Apollo DomainOS
Les derniers vestiges du support de cette plate-forme ont été supprimés du Perl
Distribution. Il a été officiellement abandonné dans la version 5.12.0. Ça n'avait pas fonctionné
pendant des années avant cela.

MacOS Classique
Les derniers vestiges du support de cette plate-forme ont été supprimés du Perl
Distribution. Il a été officiellement abandonné dans une version antérieure.

Spécifique à la plateforme Remarques
AIX

· LISEZMOI.aix a été mis à jour avec des informations sur la suite de compilateurs XL C/C++ V11
(5.12.2).

BRAS

· La sonde de configuration "d_u32align" sur ARM a été corrigée (5.12.2).

Cygwin

· MakeMaker a été mis à jour pour créer des pages de manuel sur cygwin.

· Comportement de rebase amélioré

Si une DLL est mise à jour sur cygwin, l'ancienne adresse imagebase est réutilisée. Cela résout la plupart
erreurs de rebase, en particulier lors de la mise à jour sur les DLL principales. Voir
<http://www.tishler.net/jason/software/rebase/rebase-2.4.2.README> pour en savoir plus
</br>L’Information.

· Prise en charge du préfixe standard cygwin dll (nécessaire pour les FFI)

· Fichier d'astuces de construction mis à jour

FreeBSD 7

· FreeBSD 7 ne contient plus /usr/bin/objformat. Au moment de la construction, Perl ignore maintenant le
format obj vérifier les versions 7 et supérieures et suppose ELF (5.12.1).

HP-UX

· Perl permet maintenant -Duse64bitint sans promouvoir "use64bitall" sur HP-UX (5.12.1).

IRIX

· La conversion des chaînes en nombres à virgule flottante est maintenant plus précise sur les systèmes IRIX
[perl #32380].

Mac OS X

· Les premières versions de Mac OS X (Darwin) avaient des implémentations boguées du setregid(),
setreuid(), setrgid(,) et setruid() fonctions, donc Perl ferait semblant de ne pas
exister.

Ces fonctions sont désormais reconnues sur Mac OS 10.5 (Leopard ; Darwin 9) et supérieur, comme
ils ont été corrigés [perl #72990].

MirBSDComment

· Auparavant, si vous construisiez Perl avec un partage libperl.so sur MirBSD (la configuration par défaut),
cela fonctionnerait jusqu'à l'installation; cependant, une fois installé, il serait incapable de
trouver Libperl. La gestion des chemins est maintenant traitée comme dans les autres dialectes BSD.

NetBSD

· Le fichier d'astuces NetBSD a été modifié pour faire du système malloc la valeur par défaut.

OpenBSD

· OpenBSD > 3.7 a une nouvelle implémentation malloc qui est mmap-basé, et en tant que tel peut
libérer de la mémoire vers le système d'exploitation ; cependant, l'utilisation de ce malloc par Perl entraîne une
ralentissement, donc nous utilisons maintenant par défaut le malloc de Perl à la place [perl #75742].

OuvertVOS

· Perl se reconstruit maintenant avec OpenVOS (anciennement connu sous le nom de Stratus VOS) [perl #78132]
(5.12.3).

Solaris

· DTrace est désormais pris en charge sur Solaris. Il y avait des échecs de construction, mais ceux-ci ont
été corrigé [perl #73630] (5.12.3).

VMS

· La construction d'extensions sur des systèmes VMS plus anciens (pré 7.3-2) était cassée car configure.com
atteint la limite de longueur de symbole DCL de 1K. Nous travaillons maintenant dans cette limite lors de l'assemblage
la liste des extensions dans la version principale (5.12.1).

· Nous avons corrigé la configuration et la construction de Perl avec -Uuseperlio (5.12.1).

· "PerlIOUnix_open" honore maintenant les permissions par défaut sur VMS.

Lorsque "perlio" est devenu la couche par défaut et "unix" est devenu la couche inférieure par défaut, le plus
chemin commun pour créer des fichiers à partir de Perl est devenu "PerlIOUnix_open", qui a toujours
explicitement utilisé 0666 comme masque d'autorisation. Cela empêche l'héritage des autorisations
des valeurs par défaut RMS et des ACL, donc pour éviter ce problème, nous passons maintenant 0777 à ouvrir(). En
le VMS CRTL, 0777 a une signification particulière au-delà de l'intersection avec le courant
umask ; plus précisément, il permet aux appels système Unix de conserver les autorisations natives par défaut
(5.12.3).

· Le raccourcissement des symboles de plus de 31 caractères dans les sources C de base et dans
extensions est désormais effectuée par défaut par le compilateur C plutôt que par xsubpp (ce qui pourrait
ne le faites que pour les symboles générés en code XS). Vous pouvez réactiver le symbole de xsubpp
raccourcir en configurant avec -Uuseshortenedsymbols, mais vous aurez du travail à faire
pour obtenir les sources principales à compiler.

· Fichiers orientés enregistrement (variable de format d'enregistrement ou variable avec contrôle fixe) ouverts
pour l'écriture par la couche "perlio" sera désormais mise en mémoire tampon pour empêcher l'introduction
de sauts de ligne parasites chaque fois que le tampon perlio se remplit.

· git_version.h est maintenant installé sur VMS. Il s'agissait d'un oubli dans la v5.12.0 qui a causé
certaines extensions échouent à se construire (5.12.2).

· Plusieurs fuites de mémoire dans stat () ont été corrigés (5.12.2).

· Une fuite de mémoire dans Perl_rename() en raison d'une double attribution a été corrigé (5.12.2).

· Une fuite de mémoire dans vms_fid_to_name() (utilisé par chemin réel() et vrai nom()> a été corrigé
(5.12.2).

Windows

Voir également "fourchette() l'émulation n'attendra pas les enfants signalés" et "le code source Perl est
lire en mode texte sous Windows", ci-dessus.

· Processus de construction fixe pour les compilateurs SDK2003SP1.

· La compilation avec Visual Studio 2010 est désormais prise en charge.

· Lors de l'utilisation d'anciens compilateurs 32 bits, la définition "_USE_32BIT_TIME_T" est désormais définie dans
$Config{ccflags}. Cela améliore la portabilité lors de la compilation d'extensions XS à l'aide de nouveaux
compilateurs, mais pour un Perl compilé avec d'anciens compilateurs 32 bits.

· $Config{gccversion} est maintenant défini correctement lorsque Perl est construit à l'aide du compilateur mingw64
dehttp://mingw64.org> [perl #73754].

· Lors de la construction de Perl avec le compilateur croisé mingw64 x64 "incpath", "libpth", "ldflags",
les valeurs "lddlflags" et "ldflags_nolargefiles" dans Config.pm et Config_heavy.pl ont été
n'était pas défini correctement auparavant car, avec ce compilateur, les éléments include et lib
les répertoires ne sont pas immédiatement en dessous de "$(CCHOME)" (5.12.2).

· Le processus de construction se déroule plus facilement avec mingw et dmake lorsque C:\MSYS\bin est en
le PATH, en raison d'un correctif "Cwd".

· La prise en charge de la construction avec Visual C++ 2010 est en cours, mais n'est pas encore terminée.
See LISEZ-MOI.win32 ou perlwin32 pour plus de détails.

· La possibilité d'utiliser une source externe crypte(), ou construire sans crypte() du tout,
a été retiré. Perl fournit ses propres crypte() implémentation pour Windows, et la
situation politique qui a nécessité que cette partie de la distribution soit parfois
omis est révolu depuis longtemps.

Interne Modifications


New Apis
CLONE_PARAMS structure ajoutée à facilité correct fil création

Les modules qui créent des threads doivent maintenant créer des structures "CLONE_PARAMS" en appelant le nouveau
fonction Perl_clone_params_new(), et libérez-les avec Perl_clone_params_del(). Cette volonté
assurer la compatibilité avec toute modification future des composants internes du "CLONE_PARAMS"
mise en page de la structure, et qu'elle est correctement allouée et initialisée.

New analyse fonctions

Plusieurs fonctions ont été ajoutées pour analyser les déclarations et expressions Perl. Ces
sont destinées à être utilisées par le code XS invoqué lors de l'analyse Perl, de manière récursive.
manière descendante, pour permettre aux modules d'augmenter la syntaxe Perl standard.

· parse_stmtseq() analyse une séquence d'instructions, jusqu'à l'accolade fermante ou EOF.

· parse_fullstmt() analyse une instruction Perl complète, y compris l'étiquette facultative.

· parse_barestmt() analyse une instruction sans étiquette.

· analyser_block() analyse un bloc de code.

· parse_label() analyse une étiquette d'instruction, distincte des instructions.

· "parse_fullexpr()", "parse_listexpr()", "parse_termexpr()" et "parse_arithexpr()"
analyser des expressions à différents niveaux de priorité.

Allusions hachage API

Une nouvelle API C pour l'introspection de l'indice "% ^ H" lors de l'exécution a été ajoutée. Voir
"cop_hints_2hv", "cop_hints_fetchpvn", "cop_hints_fetchpvs", "cop_hints_fetchsv", et
"hv_copy_hints_hv" dans perlapi pour plus de détails.

Une nouvelle API expérimentale a été ajoutée pour accéder à la structure interne utilisée par Perl
pour "%^H". Voir les fonctions commençant par "cophh_" dans perlapi.

C interface à votre interlocuteur()

La fonction "caller_cx" a été ajoutée en tant qu'équivalent de XSUB-writer de votre interlocuteur(). Voir
perlapi pour plus de détails.

Personnalisé par sous-programme choisissez crochets

Le code XS dans un module d'extension peut désormais annoter une sous-routine (qu'elle soit implémentée dans XS ou
en Perl) afin que le code XS désigné soit appelé au moment de la compilation (en particulier dans le cadre de
vérification op) pour changer l'arborescence op de ce sous-programme. La fonction de vérification à la compilation
(fourni par le module d'extension) peut implémenter un traitement d'arguments qui ne peut pas être
exprimé sous forme de prototype, générer des avertissements personnalisés au moment de la compilation, effectuer des
pliage pour une fonction pure, inline un sous-programme composé d'opérations suffisamment simples,
remplacer tout l'appel par une opération personnalisée, et ainsi de suite. Tout cela était auparavant possible en
accrocher le vérificateur d'opération "entersub", mais le nouveau mécanisme permet d'attacher facilement le crochet à
un sous-programme spécifique. Voir "cv_set_call_checker" dans perlapi.

Pour vous aider à rédiger des crochets de vérification personnalisés, plusieurs sous-tâches dans l'opération "entersub" standard
vérification ont été séparés et exposés dans l'API.

Agencement des soutenez pour Customiser OP

Les opérations personnalisées peuvent maintenant être enregistrées avec la nouvelle fonction C "custom_op_register" et le
Structure "XOP". Cela facilitera l'ajout de nouvelles propriétés d'opérations personnalisées dans le
futur. Deux nouvelles propriétés ont déjà été ajoutées, "xop_class" et "xop_peep".

"xop_class" est l'une des constantes OA_*OP. Il permet B et autre introspection
mécanismes pour travailler avec des opérations personnalisées qui ne sont pas des BASEOPs. "xop_peep" est un pointeur vers un
fonction qui sera appelée pour les ops de ce type depuis "Perl_rpeep".

Voir "Opérateurs personnalisés" dans perlguts et "Opérateurs personnalisés" dans perlapi pour plus de détails.

L'ancienne interface "PL_custom_op_names"/"PL_custom_op_descs" est toujours supportée mais
découragé.

Domaine crochets

Il est maintenant possible pour le code XS de s'accrocher au mécanisme de portée lexicale de Perl à la compilation
fois, en utilisant la nouvelle fonction "Perl_blockhook_register". Voir "Hooks de portée au moment de la compilation" dans
perlguts.

L'exposition récursif partie of le judas optimiseur is maintenant accroché

En plus de "PL_peepp", pour se connecter à l'optimiseur de judas de niveau supérieur, un "PL_rpeepp"
est maintenant disponible pour s'accrocher à l'optimiseur récursif dans les chaînes latérales de l'optree.

New non magique variantes of existant fonctions

Les fonctions/macros suivantes ont été ajoutées à l'API. Les macros *_nomg sont
équivalent à leurs variantes non "_nomg", sauf qu'ils ignorent get-magic. Ceux qui se terminent
dans "_flags" permet de spécifier si get-magic est traité.

sv_2bool_flags
SvTRUE_nomg
sv_2nv_flags
SvNV_nomg
sv_cmp_flags
sv_cmp_locale_flags
sv_eq_flags
sv_collxfrm_flags

Dans certains de ces cas, les fonctions non "_flags" ont été remplacées par des wrappers autour
les nouvelles fonctions.

pv/pvs/sv versions of existant fonctions

De nombreuses fonctions se terminant par pvn ont maintenant des versions équivalentes "pv/pvs/sv".

Liste op-bâtiment fonctions

Des fonctions de construction de listes ont été ajoutées à l'API. Voir op_append_elem,
op_append_list et op_prepend_elem dans perlapi.

"LISTE DE LIENS"

La macro LINKLIST, qui fait partie de la construction d'opérations qui construit la chaîne d'opérations d'ordre d'exécution, a
été ajouté à l'API.

Adresse fonctions

Les fonctions "save_freeop", "save_op", "save_pushi32ptr" et "save_pushptrptr" ont été
ajouté à l'API.

Planquer noms

Une réserve peut maintenant avoir une liste de noms effectifs en plus de son nom habituel. La première
le nom effectif est accessible via la macro "HvENAME", qui est maintenant le nom recommandé
à utiliser dans les linéarisations MRO ("HvNAME" étant une solution de repli s'il n'y a pas de "HvENAME").

Ces noms sont ajoutés et supprimés via "hv_ename_add" et "hv_ename_delete". Ces deux
les fonctions sont pas partie de l'API.

New fonctions pour trouver et enlever la magie

Les fonctions "mg_findext()" et "sv_unmagicext()" ont été ajoutées à l'API. Ils permettent
auteurs d'extensions pour trouver et supprimer la magie attachée aux scalaires en fonction à la fois de la magie
type et la table virtuelle magique, similaire à la façon dont sv_magicext() attache la magie d'un certain
type et avec une table virtuelle donnée à un scalaire. Cela élimine le besoin d'extensions
parcourir la liste des pointeurs "MAGIC" d'un "SV" pour trouver la magie qui leur appartient.

"trouver_rundefsv"

Cette fonction renvoie la SV représentant $_, qu'elle soit lexicale ou dynamique.

"Perl_croak_no_modify"

Perl_croak_no_modify() est un raccourci pour "Perl_croak("%s", PL_no_modify)".

"PERL_STATIC_INLINE" Vous permet de définir

La définition "PERL_STATIC_INLINE" a été ajoutée pour fournir l'incantation la plus probable à
à utiliser pour les fonctions statiques en ligne, si le compilateur C prend en charge les fonctions statiques en ligne de style C99. Si
ce n'est pas le cas, cela donnera un simple "statique".

"HAS_STATIC_INLINE" peut être utilisé pour vérifier si le compilateur prend réellement en charge inline
fonctions.

New "pv_évasion" option pour hexadécimal s'échappe

Une nouvelle option, "PERL_PV_ESCAPE_NONASCII", a été ajoutée à "pv_escape" pour tout vider
caractères au-dessus de l'ASCII en hexadécimal. Avant, on pouvait obtenir tous les caractères comme
hexadécimal ou le Latin1 non-ASCII en octal.

"lex_start"

"lex_start" a été ajouté à l'API, mais est considéré comme expérimental.

op_scope() et op_lvalue()

L'exposition op_scope() et op_lvalue() des fonctions ont été ajoutées à l'API, mais sont considérées
expérimental.

C API Modifications
"PERL_POLLUANT" a était enlevé

L'option de définir "PERL_POLLUTE" pour exposer les anciens symboles 5.005 pour l'envers
la compatibilité a été supprimée. Son utilisation a toujours été déconseillée, et MakeMaker contient un
trappe d'évacuation plus spécifique :

perl Makefile.PL POLLUTE=1

Cela peut être utilisé pour les modules qui n'ont pas été mis à niveau vers les conventions de nommage 5.6 (et
devrait vraiment être complètement obsolète maintenant).

Vérifiez API compatibilité quand chargement XS modules

Lorsque l'API de Perl change de manière incompatible (ce qui se produit généralement entre les principaux
releases), les modules XS compilés pour les versions précédentes de Perl ne fonctionneront plus. Ils
doivent être recompilés avec le nouveau Perl.

La macro "XS_APIVERSION_BOOTCHECK" a été ajoutée pour s'assurer que les modules sont recompilés
et pour empêcher les utilisateurs de charger accidentellement des modules compilés pour d'anciens perls dans de nouveaux
perles. Cette macro, qui est appelée lors du chargement de chaque extension nouvellement compilée, compare
la version API du perl en cours d'exécution avec la version pour laquelle un module a été compilé et
lève une exception si elles ne correspondent pas.

Perl_fetch_cop_label

Le premier argument de la fonction API C "Perl_fetch_cop_label" est passé de "struct
refcounted_he *" à "COP *", pour isoler l'utilisateur des détails d'implémentation.

Cette fonction API a été marquée comme "peut changer" et n'est probablement pas utilisée en dehors du noyau.
(Ni un CPAN décompressé ni la recherche de code de Google ne trouvent d'autres références à celui-ci.)

GvCV() et GvGP() sommes-nous aucune plus long lvaleurs

Le nouveau système d’ GvCV_set() et GvGP_set() des macros sont maintenant fournies pour remplacer l'affectation à ceux
deux macro.

Cela permet à un futur commit d'éliminer certains backref magiques entre GV et CV, ce qui
nécessitent un contrôle complet sur l'affectation au slot "gp_cv".

CvGV() is aucune plus long an lvaleur

Dans certaines circonstances, le CvGV() champ d'un CV est désormais référencé. S'assurer
comportement cohérent, une affectation directe à celui-ci, par exemple "CvGV(cv) = gv" est maintenant un
erreur de compilation. Une nouvelle macro, "CvGV_set(cv,gv)" a été introduite pour exécuter cette
fonctionnement en toute sécurité. Notez que la modification de ce champ ne fait pas partie de l'API publique,
indépendamment de cette nouvelle macro (et bien qu'elle soit répertoriée dans cette section).

CvSTASH() is aucune plus long an lvaleur

L'exposition CvSTASH() La macro ne peut désormais être utilisée que comme rvalue. CvSTASH_set() a été ajouté à
remplacer l'affectation à CvSTASH(). Cela permet de s'assurer que les références arrière sont gérées
correctement. Ces macros ne font pas partie de l'API.

appel conventions pour "nouveauFOROP" et "nouveauWHILEOP"

La façon dont l'analyseur gère les étiquettes a été nettoyée et refactorisée. En conséquence, le
nouveauFOROP() la fonction constructeur ne prend plus de paramètre indiquant quelle étiquette doit entrer
l'état op.

L'exposition nouveauWHILEOP() et nouveauFOROP() les fonctions n'acceptent plus un numéro de ligne comme paramètre.

Drapeaux passé à "uvuni_to_utf8_flags" et "utf8n_to_uvuni"

Certains des paramètres de drapeaux à uvuni_to_utf8_flags() et utf8n_to_uvuni() ont changé.
Ceci est le résultat du fait que Perl autorise désormais le stockage interne et la manipulation des points de code
qui posent problème dans certaines situations. Par conséquent, les actions par défaut pour ces fonctions
a été complété pour permettre ces points de code. Les nouveaux drapeaux sont documentés dans
perlapi. Le code qui nécessite le rejet des points de code problématiques doit être remplacé par
utiliser les nouveaux drapeaux. Certains noms d'indicateurs sont conservés pour la compatibilité descendante des sources, bien que
ils ne font rien, car ils sont maintenant la valeur par défaut. Cependant les flags "UNICODE_ALLOW_FDD0",
"UNICODE_ALLOW_FFFF", "UNICODE_ILLEGAL" et "UNICODE_IS_ILLEGAL" ont été supprimés, car
ils proviennent d'un modèle fondamentalement brisé de la façon dont le code Unicode non-caractère pointe
doit être géré, ce qui est maintenant décrit dans "Points de code non-caractères" dans perlunicode.
Voir aussi la section Unicode sous "Correctifs de bogues sélectionnés".

Obsolète C Apis
"Perl_ptr_table_clear"
"Perl_ptr_table_clear" ne fait plus partie de l'API publique de Perl. L'appeler maintenant
génère un avertissement d'obsolescence et sera supprimé dans une prochaine version.

"sv_compile_2op"
L'exposition sv_compile_2op() La fonction API est désormais obsolète. Les recherches suggèrent que rien sur
CPAN l'utilise, cela ne devrait donc avoir aucun impact.

Il a tenté de fournir une API pour compiler le code jusqu'à un optree, mais n'a pas réussi à se lier
correctement aux lexicaux dans la portée englobante. Il n'est pas possible de résoudre ce problème
dans les limites de ses paramètres et de sa valeur de retour.

"find_rundefsvoffset"
La fonction "find_rundefsvoffset" est obsolète. Il est apparu que sa conception
était insuffisant pour obtenir de manière fiable le $_ lexical au moment de l'exécution.

Utilisez la nouvelle fonction "find_rundefsv" ou la macro "UNDERBAR" à la place. Ils directement
renvoie le bon SV représentant $_, qu'il soit lexical ou dynamique.

"CALL_FPTR" et "CPERLscope"
Celles-ci proviennent d'une ancienne implémentation de "MULTIPLICITY" utilisant des objets C++, qui
a été supprimé dans Perl 5.8. De nos jours, ces macros ne font exactement rien, elles ne devraient donc pas
être plus utilisé.

Pour des raisons de compatibilité, ils sont toujours définis pour le code "XS" externe. Uniquement les extensions
la définition de "PERL_CORE" doit être mise à jour maintenant.

Autres Interne Modifications
Stack se détendre

Le protocole de déroulement de la pile C à la dernière étape d'un "dé" a changé la façon dont il
identifie le cadre de pile cible. Cela utilise maintenant une variable distincte "PL_restartjmpenv",
où auparavant il s'appuyait sur le pointeur "blk_eval.cur_top_env" dans le contexte "eval"
cadre qui vient d'être supprimé. Ce changement signifie que le code s'exécutant pendant
les différentes étapes du déroulement au niveau de Perl n'ont plus besoin de prendre soin d'éviter de détruire
le cadre fantôme.

Domaine empiler entrées

Le format des entrées sur la pile de portée a été modifié, ce qui a entraîné une réduction de
utilisation de la mémoire d'environ 10 %. En particulier, la mémoire utilisée par la pile de portée pour enregistrer
chaque variable lexicale active a été réduite de moitié.

Mémoire allocation pour aiguille les tables

L'allocation de mémoire pour les tables de pointeurs a été modifiée. Auparavant "Perl_ptr_table_store"
mémoire allouée du même système d'arène que les corps "SV" et "HE", avec mémoire libérée
rester lié à ces arènes jusqu'à la sortie de l'interprète. Maintenant, il alloue de la mémoire à partir de
arènes privées à la table de pointeurs spécifique, et cette mémoire est renvoyée au système
lorsque "Perl_ptr_table_free" est appelé. De plus, l'allocation et la libération sont toutes deux moins
Processeur intensif.

"SOUS BARRE"

La macro "UNDERBAR" appelle désormais "find_rundefsv". "dUNDERBAR" est maintenant un noop mais devrait
encore être utilisé pour assurer la compatibilité passée et future.

Chaîne Comparaison routines renommé

Les fonctions "ibcmp_*" ont été renommées et s'appellent désormais "foldEQ", "foldEQ_locale",
et "foldEQ_utf8". Les anciens noms sont toujours disponibles sous forme de macros.

"hacher" et "choquer" implémentations Fusionné

Les corps d'opcode pour "chop" et "chomp" et pour "schop" et "schomp" ont été fusionnés.
Les fonctions de mise en œuvre Perl_do_chop() et Perl_do_chomp(), jamais partie du public
API, ont été fusionnées et déplacées vers une fonction statique dans pp.c. Cela rétrécit le Perl
légèrement binaire, et ne devrait affecter aucun code en dehors du noyau (à moins qu'il ne s'appuie sur
l'ordre des effets secondaires lorsque "chomp" est passé un liste de valeurs).

Sélectionné Punaise Correctifs


I / O
· Perl ne produit plus cet avertissement :

$ perl -we 'open(my $f, ">", \my $x); binmode($f, "scalaire")'
Utilisation d'une valeur non initialisée en binmode à -e ligne 1.

· L'ouverture d'une référence glob via "open($fh, ">", \*glob)" ne provoque plus la
corrompu lorsque le descripteur de fichier est imprimé. Cela ferait planter Perl chaque fois que
le contenu du glob a été accédé [perl #77492].

· PerlIO ne se bloque plus lorsqu'il est appelé de manière récursive, par exemple depuis un gestionnaire de signal. À présent
il perd juste de la mémoire [perl #75556].

· La plupart des fonctions d'E/S n'avertissaient pas pour les poignées non ouvertes à moins que le "fermé" et
les catégories d'avertissements "non ouvertes" étaient toutes deux activées. Maintenant seulement "utiliser les avertissements 'non ouverts'"
est nécessaire pour déclencher ces avertissements, comme cela a toujours été l'intention.

· Plusieurs correctifs ont été apportés aux couches PerlIO :

Lorsque "binmode(FH, ":crlf")" place le calque ":crlf" au-dessus de la pile, il n'est plus
active les couches crlf plus bas dans la pile afin d'éviter des résultats inattendus [perl
#38456].

L'ouverture d'un fichier en mode ":raw" fait maintenant ce qu'il annonce (d'abord ouvrir le fichier,
puis "binmode" it), au lieu de simplement laisser de côté la couche supérieure [perl #80764].

Les trois couches ":pop", ":utf8" et ":bytes" ne permettaient pas l'empilement lors de l'ouverture d'un
déposer. Par exemple ceci :

open(FH, ">:pop:perlio", "some.file") ou die $!;

renverrait une erreur "argument invalide". Cela a été corrigé dans cette version [perl
#82484].

Régulier Expression Punaise Correctifs
· Le moteur d'expressions régulières ne boucle plus lors de la recherche de ""\N{LATIN SMALL LIGATURE
FF}" =~ /f+/i" et expressions similaires [perl #72998] (5.12.1).

· Le code d'exécution de trie ne devrait plus allouer d'énormes quantités de mémoire, corrigeant
# 74484.

· Les erreurs de syntaxe dans les blocs "(?{...})" ne provoquent plus de messages de panique [perl #2353].

· Un modèle comme "(?:(o){2}) ?" ne provoque plus d'erreur "panique" [perl #39233].

· Une erreur fatale dans les expressions régulières contenant "(.*?)" lors du traitement des données UTF-8 a
été corrigé [perl #75680] (5.12.2).

· Une optimisation erronée du moteur d'expression régulière qui provoquait des verbes regex comme
*COMMIT parfois à ignorer a été supprimé.

· La classe de caractères entre crochets de l'expression régulière "[\8\9]" était en fait la même que
"[89\000]", correspondant de manière incorrecte à un caractère NULL. Il a également donné des avertissements incorrects
que les 8 et 9 ont été ignorés. Maintenant "[\8\9]" est identique à "[89]" et donne
avertissements légitimes que "\8" et "\9" sont des séquences d'échappement non reconnues, passé-
par.

· Une correspondance d'expression régulière dans la partie droite d'une substitution globale ("s///g")
qui est dans la même portée n'entraînera plus d'erreur dans les variables de correspondance
valeurs lors des itérations suivantes. Cela peut se produire lorsqu'un tableau ou un indice de hachage est
interpolé dans le côté droit, comme dans "s|(.)|@a{ print($1), /./ }|g" [perle
#19078].

· Plusieurs cas d'utilisation de caractères de la gamme Latin-1 non ASCII (0x80 à 0xFF)
ne pas correspondre à eux-mêmes, ou utilisés pour correspondre à la fois à une classe de caractères et à son complément,
ont été fixés. Par exemple, U+00E2 pourrait correspondre à la fois à "\w" et "\W" [perl #78464]
[perl #18281] [perl #60156].

· Faire correspondre un caractère Unicode à une alternance contenant des caractères qui
correspondait aux octets de continuation dans la représentation UTF8 de l'ancien (comme
"qq{\x{30ab}} =~ /\xab|\xa9/") provoquait des avertissements erronés [perl #70998].

· L'optimisation de trie ne prenait pas en compte les groupes vides, empêchant "foo" de
correspondant à "/\A(?:(?:)foo|bar|zot)\z/" [perl #78356].

· Un modèle contenant un "+" à l'intérieur d'une anticipation provoquait parfois une correspondance incorrecte
échec dans une correspondance globale (par exemple, "/(?=(\S+))/g") [perl #68564].

· Une optimisation d'expression régulière provoquait parfois une correspondance avec un "{n,m}"
quantificateur échoue alors qu'il aurait dû correspondre [perl #79152].

· La correspondance insensible à la casse dans les expressions régulières compilées sous "use locale" fonctionne désormais
beaucoup plus sainement lorsque le modèle ou la chaîne cible est encodé en interne en UTF8.
Auparavant, dans ces conditions, le caractère local était complètement perdu. Maintenant, codez
les points supérieurs à 255 sont traités comme Unicode, mais les points de code entre 0 et 255 sont traités
en utilisant les règles locales actuelles, que le modèle ou la chaîne soit
encodé en UTF8. Les quelques correspondances insensibles à la casse qui traversent la limite 255/256 sont
interdit. Par exemple, 0xFF ne correspond pas sans cas au caractère à 0x178,
LETTRE MAJUSCULE LATINE Y AVEC TRÉMA, car 0xFF ne peut pas être LETTRE MINUSCULE LATINE Y dans
la locale actuelle, et Perl n'a aucun moyen de savoir si ce caractère existe même dans
les paramètres régionaux, et encore moins de quel point de code il s'agit.

· La construction d'expression régulière "(?|...)" ne plante plus si la branche finale a
plus d'ensembles de parenthèses capturantes que n'importe quelle autre branche. Cela a été corrigé en Perl
5.10.1 pour le cas d'une seule branche, mais ce correctif n'a pas pris plusieurs branches
en compte [perl #84746].

· Un bogue a été corrigé dans l'implémentation des quantificateurs "{...}" dans les
expressions qui empêchaient le bloc de code dans "/((\w+)(?{ print $2 })){2}/" de voir
les 2 $ parfois [perl #84294].

Syntaxe/analyse Bugs
· "when (scalaire) {...}" ne plante plus, mais produit une erreur de syntaxe [perl #74114]
(5.12.1).

· Une étiquette juste avant une chaîne eval ("foo: eval $string") n'entraîne plus l'étiquette à
être également associé à la première instruction à l'intérieur de eval [perl #74290] (5.12.1).

· La forme "non 5.13.2" de "non" n'essaie plus d'activer les fonctionnalités ou les pragmata (comme
strict) [perl #70075] (5.12.2).

· "BEGIN {require 5.12.0}" se comporte désormais comme documenté, plutôt que de se comporter de manière identique
à "utiliser 5.12.0". Auparavant, "require" dans un bloc "BEGIN" s'exécutait par erreur
le comportement "use feature ':5.12.0'" et "use strict", dont seul "use" était
documenté pour fournir [perl #69050].

· Une régression introduite dans Perl 5.12.0, donnant le résultat "my $x = 3; $x = length(undef)"
in $x fixé à 3 a été corrigé. $x sera désormais "undef" [perl #85508] (5.12.2).

· Lorsque le mode "refs" strict est désactivé, "%{...}" dans le contexte rvalue renvoie "undef" si son
l'argument n'est pas défini. Une optimisation introduite dans Perl 5.12.0 pour rendre les "clés
%{...}" plus rapide lorsqu'il est utilisé comme un booléen n'a pas pris cela en compte, provoquant des "clés
%{+undef}" (et "keys %$foo" lorsque $foo n'est pas défini) comme une erreur, ce qui devrait
ne l'être qu'en mode strict [perl #81750].

· Pliage constant utilisé pour provoquer

$texte =~ ( 1 ? /phoo/ : /ours/)

se transformer en

$texte =~ /ouh/

au moment de la compilation. Maintenant, il correspond correctement à $_ [perl #20444].

· Analyser le code Perl (soit avec la chaîne "eval" soit en chargeant des modules) à partir d'un
Le bloc "UNITCHECK" ne fait plus planter l'interpréteur [perl #70614].

· Les chaînes "eval" n'échouent plus après la compilation de 2 milliards de portées [perl #83364].

· L'analyseur ne se bloque plus lorsqu'il rencontre certains caractères Unicode, tels que U+387
[perl #74022].

· Définir une constante avec le même nom que l'un des blocs spéciaux de Perl (comme "INIT")
a cessé de fonctionner dans la version 5.12.0, mais a maintenant été corrigé [perl #78634].

· Une référence à une valeur littérale utilisée comme clé de hachage ($hash{\"foo"}) était autrefois
stringifié, même si le hachage était lié [perl #79178].

· Une fermeture contenant une instruction "if" suivie d'une constante ou d'une variable n'est plus
traité comme une constante [perl #63540].

· Le « état » peut maintenant être employé avec des attributs. Il avait l'habitude de signifier la même chose que "mon" si
tous les attributs étaient présents [perl #68658].

· Des expressions telles que "@$a > 3" ne font plus mentionner $a dans l'"Utilisation de
valeur non initialisée dans gt numérique" avertissement lorsque $a n'est pas défini (puisqu'il ne fait pas partie
de l'expression ">", mais l'opérande du "@") [perl #72090].

· Accéder à un élément d'un tableau de packages avec un numéro codé en dur (par opposition à un
expression arbitraire) planterait si le tableau n'existait pas. Habituellement, le tableau serait
être autovivifié lors de la compilation, mais la manipulation de typeglob pourrait le supprimer, comme dans
ces deux cas qui plantaient :

*d = *a ; imprimer $d[0] ;
undef *d; imprimer $d[0] ;

· Le -C L'option de ligne de commande, lorsqu'elle est utilisée sur la ligne shebang, peut maintenant être suivie de
autres options [perl #72434].

· Le module "B" renvoyait des "B::OP" au lieu de "B::LOGOP" pour "entertry" [perl
#80622]. Cela était dû à un bogue dans le noyau Perl, pas dans "B" lui-même.

Cachettes, Globes et Méthode Lookup
Perl 5.10.0 a introduit un nouveau mécanisme interne de mise en cache des MRO (méthode de résolution
commandes ou listes de classes parentes ; alias caches "isa") pour rendre la recherche de méthode plus rapide (donc
Les tableaux @ISA n'auraient pas à être recherchés à plusieurs reprises). Malheureusement, cela a amené avec
c'est pas mal de bugs. Presque tous ces problèmes ont été corrigés maintenant, ainsi que quelques MRO-
bogues associés qui existaient avant 5.10.0 :

· Les éléments suivants avaient des effets erratiques sur la résolution de la méthode, car le "isa"
les caches n'ont pas été réinitialisés ou ont fini par répertorier les mauvaises classes. Ceux-ci ont
été corrigé.

Créer des alias de packages en les attribuant à des globs [perl #77358]
Suppression de packages en supprimant leurs éléments de cache contenants
Annuler la définition du glob contenant un package ("undef *Foo::")
Annuler la définition d'un glob ISA ("undef *Foo::ISA")
Suppression d'un élément de cache ISA ("delete $Foo::{ISA}")
Partage de tableaux @ISA entre classes (via "*Foo::ISA = \@Bar::ISA" ou "*Foo::ISA =
*Bar::ISA") [perl #77238]

"undef *Foo::ISA" empêcherait même un nouveau tableau @Foo::ISA de mettre à jour les caches.

· Les affectations Typeglob planteraient si la réserve du glob n'existait plus, tant que le
glob assigné à ont été nommés "ISA" ou le glob de chaque côté de l'affectation
contenait un sous-programme.

· "PL_isarev", qui est accessible à Perl via "mro::get_isarev" est maintenant correctement mis à jour
lorsque des packages sont supprimés ou retirés de @ISA d'autres classes. Cela permet à de nombreux
paquets à créer et à supprimer sans provoquer de fuite mémoire [perl #75176].

De plus, divers autres bogues liés aux typeglobs et aux caches ont été corrigés :

· Certains travaux ont été effectués sur les pointeurs internes qui relient les tables de symboles
(cachettes), typeglobs et sous-routines. Cela a pour effet que divers cas limites
liés à la suppression de stashs ou d'entrées de stash (par exemple, <%FOO:: = ()>), et complexes
typeglob ou l'aliasing de référence de code, ne planteront plus l'interpréteur.

· L'attribution d'une référence à une copie globale est désormais attribuée à un emplacement global au lieu d'écraser
le glob avec un scalaire [perl #1804] [perl #77508].

· Un bogue lors du remplacement du glob d'une variable de boucle dans la boucle a été corrigé [perl
#21469]. Cela signifie que le code suivant ne plantera plus :

pour $x (...) {
*x = *y ;
}

· Affectation d'un glob à un PVLV utilisé pour le convertir en une chaîne simple. Maintenant ça marche
correctement, et un PVLV peut contenir un glob. Cela se produirait lorsqu'un hachage inexistant ou
L'élément de tableau a été passé à une sous-routine :

sub { $_[0] = *foo }->($hachage{clé});
# $_[0] aurait été la chaîne "*main::foo"

Cela se produisait également lorsqu'un glob était affecté à, ou revenait d'un élément d'un élément lié.
tableau ou hachage [perl #36051].

· Lorsque vous essayez de signaler "Utilisation d'une valeur non initialisée $Foo::BAR", des plantages peuvent se produire si
le glob contenant la variable globale en question avait été détaché de son original
stash par, par exemple, "delete $::{"Foo::"}". Cela a été corrigé en désactivant le
rapport des noms de variables dans ces cas.

· Lors de la restauration d'un typeglob localisé à la sortie de la portée, tous les destructeurs appelés
en conséquence serait en mesure de voir le typeglob dans un état incohérent, contenant
entrées libérées, ce qui pourrait entraîner un plantage. Cela affecterait un code comme celui-ci :

locale *@ ;
eval { mourir béni [] } ; # place un objet dans $@
sous-DÉTRUIRE {
local $@ ; # boum
}

Désormais, les entrées glob sont effacées avant l'appel de tout destructeur. Cela signifie aussi
que les destructeurs peuvent vivifier les entrées dans le glob. Alors Perl essaie à nouveau et, si le
les entrées sont recréées trop de fois, meurt avec un message d'erreur "panic: gp_free ...".

· Si un typeglob est libéré alors qu'un sous-programme qui lui est attaché est toujours référencé
ailleurs, le sous-programme est renommé en "__ANON__" dans le même package, à moins que le
package n'a pas été défini, auquel cas le package "__ANON__" est utilisé. Cela pourrait
provoquent parfois l'autovivification des packages, comme si le package avait été supprimé.
Maintenant, cela ne se produit plus. Le package "__ANON__" est également désormais utilisé lorsque l'original
package n'est plus attaché à la table des symboles. Cela évite les fuites de mémoire dans certains
cas [perl #87664].

· Les sous-routines et les variables de package à l'intérieur d'un package dont le nom se termine par "::" peuvent désormais
être accessible avec un nom pleinement qualifié.

Unicode
· Ce qui est devenu connu comme "le bogue Unicode" est presque complètement résolu dans ce
Libération. Sous "utiliser la fonctionnalité 'unicode_strings'" (qui est automatiquement sélectionné par
"use 5.012" et supérieur), le format de stockage interne d'une chaîne n'affecte plus le
sémantique externe. [perl #58182].

Il existe deux exceptions connues :

1. Les fonctions de changement de casse définies par l'utilisateur, désormais obsolètes, nécessitent
cordes à opérer. Le module CPAN Unicode::Casing a été écrit pour remplacer
cette fonctionnalité sans ses inconvénients, et la fonctionnalité doit être supprimée dans
5.16.

2. citationméta() (et son équivalent en ligne "\Q") peut également donner des résultats différents
selon qu'une chaîne est codée en UTF-8 ou non. Voir "Le "bogue Unicode"" dans
perlunicode.

· La manipulation des points de code de non-caractère d'Unicode a changé. Auparavant, ils étaient
pour la plupart considérés comme illégaux, sauf qu'à certains endroits, un seul des 66 d'entre eux était
connu. La norme Unicode les considère tous comme légaux, mais interdit leur "open
échange". Cela fait partie du changement pour permettre l'utilisation interne de n'importe quel point de code (voir
"Améliorations de base"). Ensemble, ces changements résolvent [perl #38722], [perl #51918],
[perl #51936] et [perl #63446].

· Correspondance d'expression régulière "/i" insensible à la casse des caractères Unicode qui correspondent
plusieurs personnages fonctionnent maintenant beaucoup plus comme prévu. Par example

"\N{LATIN SMALL LIGATURE FFI}" =~ /ffi/ui

et

"ffi" =~ /\N{LATIN SMALL LIGATURE FFI}/ui

sont tous les deux vrais. Auparavant, il y avait beaucoup de bugs avec cette fonctionnalité. Ce qui n'a pas été
fixes sont les endroits où le motif contient les caractères multiples, mais les
les personnages sont séparés par d'autres choses, comme dans

"\N{LATIN SMALL LIGATURE FFI}" =~ /(f)(f)i/ui

or

"\N{LATIN SMALL LIGATURE FFI}" =~ /ffi*/ui

or

"\N{LATIN SMALL LIGATURE FFI}" =~ /[af][fm][gz]/ui

Aucun de ceux-ci ne correspond.

De plus, cette correspondance n'est pas entièrement conforme à la norme Unicode actuelle, qui demande
que la mise en correspondance soit faite sur la NFD (Forme de Normalisation Décomposée) du texte.
Cependant, au moment d'écrire ces lignes (avril 2010), la norme Unicode est actuellement en pleine mutation
sur ce qu'ils recommanderont de faire dans de tels scénarios. Il se peut que
ils jetteront tout le concept de correspondances multi-caractères. [perl #71736].

· Nommer un caractère obsolète dans "\N{NOM}" ne perd plus de mémoire.

· Nous avons corrigé un bogue qui pouvait causer "\N{NOM}" constructions suivies d'un simple "." être
mal analysé [perl #74978] (5.12.1).

· "chop" gère désormais correctement les caractères au-dessus de "\x{7fffffff}" [perl #73246].

· Passer à "index" un décalage au-delà de la fin de la chaîne lorsque la chaîne est encodée
en interne dans UTF8 ne provoque plus de panique [perl #75898].

· avertir() et mourir() respecte désormais les scalaires encodés en utf8 [perl #45549].

· Parfois, le cache de longueur UTF8 n'était pas réinitialisé sur une valeur renvoyée par substr,
ce qui fait que "length(substr($uni_string, ...))" donne de mauvaises réponses. Avec
"${^UTF8CACHE}" défini sur -1, cela produirait également un message d'erreur "panique" [perl
#77692].

Liens, Surcharge et Autres la magie
· La surcharge fonctionne désormais correctement en conjonction avec des variables liées. Qu'est-ce qu'autrefois
arrivé était que la plupart des ops vérifiaient leurs arguments pour la surcharge avant vérifier
magie, donc par exemple un objet surchargé renvoyé par un accès au tableau lié serait
généralement être traité comme non surchargé [RT #57012].

· Diverses instances de magie (comme les méthodes de liaison) étant appelées trop souvent sur des variables liées
ou trop peu de fois ont été corrigées :

· "$tied->()" n'appelait pas toujours FETCH [perl #8438].

· Les opérateurs Filetest et "y///" et "tr///" appelaient FETCH trop souvent.

· L'opérateur "=" utilisé pour ignorer la magie sur son côté droit si le scalaire
s'est avéré contenir un typeglob (si un typeglob était la dernière chose renvoyée de ou
assigné à un scalaire lié) [perl #77498].

· Opérateurs de déréférencement utilisés pour ignorer la magie si l'argument était déjà une référence
(comme à partir d'un FETCH précédent) [perl #72144].

· "splice" appelle maintenant set-magic (donc les modifications faites par "splice @ISA" sont respectées par
appels de méthode) [perl #78400].

· Les fichiers en mémoire créés par "open($fh, ">", \$buffer)" n'appelaient pas FETCH/STORE
du tout [perl #43789] (5.12.2).

· utf8 ::is_utf8() respecte maintenant get-magic (comme $1) (5.12.1).

· Opérateurs binaires non commutatifs utilisés pour échanger leurs opérandes si le même scalaire lié
a été utilisé pour les deux opérandes et a renvoyé une valeur différente pour chaque FETCH. Pour
exemple, si $t renvoyait 2 la première fois et 3 la seconde, alors "$t/$t"
évaluer à 1.5. Cela a été corrigé [perl #87708].

· La chaîne « eval » détecte désormais la souillure des arguments surchargés ou liés [perl #75716].

· La chaîne "eval" et l'expression régulière correspondent à des objets avec une surcharge de chaîne
ne cause plus de corruption de mémoire ni de plantage [perl #77084].

· readline honore désormais la surcharge "<>" sur les arguments liés.

· " " respecte toujours la surcharge maintenant si l'expression est surchargée.

Parce que "<> as glob" a été analysé différemment de "<> as filehandle" à partir de 5.6,
quelque chose comme "<$foo[0]>" ne gérait pas la surcharge, même si $foo[0] était un
objet surchargé. Cela était contraire à la documentation sur la surcharge et signifiait
que "<>" ne pouvait pas être utilisé comme opérateur itérateur général surchargé.

· Le comportement de repli de la surcharge sur les opérateurs binaires était asymétrique [perl
#71286].

· La magie appliquée aux variables du package principal n'affecte plus les autres packages. Voir
"Variables magiques en dehors du package principal" ci-dessus [perl #76138].

· Parfois, la magie (liens, souillure, etc.) attachée aux variables peut provoquer un objet
durer plus longtemps qu'il ne le devrait, ou provoquer un plantage si une variable liée était libérée de
dans une méthode d'égalité. Ceux-ci ont été corrigés [perl #81230].

· Les méthodes DESTROY des objets implémentant des liens ne peuvent plus planter en accédant
la variable liée par une référence faible [perl #86328].

· Correction d'une régression de tuer() lorsqu'une variable de correspondance est utilisée pour l'ID de processus à tuer
[perl #75812].

· $AUTOLOAD restait entaché pour toujours s'il devenait entaché. C'est maintenant
correctement intacte si une méthode chargée automatiquement est appelée et que le nom de la méthode n'a pas été
entaché.

· Le « sprintf » meurt maintenant une fois passé un scalaire souillé pour le format. Il est déjà mort
pour les expressions arbitraires, mais pas pour les scalaires simples [perl #82250].

· "lc", "uc", "lcfirst" et "ucfirst" ne renvoient plus de chaînes intactes lorsque le
l'argumentation est entachée. Cela a été cassé depuis perl 5.8.9 [perl #87336].

L'exposition Debugger
· Le débogueur Perl fonctionne maintenant aussi en mode taint [perl #76872].

· La redéfinition des sous-programmes fonctionne une fois de plus dans le débogueur [perl #48332].

· Lorsque -d est utilisé sur la ligne shebang ("#!"), le débogueur a maintenant accès aux lignes
du programme principal. Dans le passé, cela fonctionnait parfois et parfois non,
selon l'ordre dans lequel les choses se sont passées pour être arrangées en mémoire [perl
#71806].

· Une fuite de mémoire possible lors de l'utilisation votre interlocuteur() pour définir @DB::args a été corrigé (5.12.2).

· Perl n'écrase plus $DB::single, $DB::trace et $DB::signal si ces variables
ont déjà des valeurs lorsque $^P est assigné à [perl #72422].

· Les directives "#line" dans les évaluations de chaînes ne mettaient pas correctement à jour les tableaux de lignes de
code ("@{"_< ..."}") utilisé par le débogueur (ou tout module de débogage ou de profilage).
Dans les versions threadées, elles n'étaient pas du tout mises à jour. Dans les versions sans thread, le
le numéro de ligne a été ignoré, donc toute modification du numéro de ligne existant entraînerait le
lignes mal numérotées [perl #79442].

Threads
· Perl ne clone plus accidentellement les lexicaux dans la portée dans les cadres de pile actifs dans le
parent lors de la création d'un thread enfant [perl #73086].

· Plusieurs fuites de mémoire dans le clonage et la libération des interpréteurs Perl threadés ont été corrigées
[perl #77352].

· La création d'un nouveau fil alors que les descripteurs de répertoire étaient ouverts provoquait un plantage, car
les poignées n'ont pas été clonées, mais simplement transmises au nouveau thread, ce qui a entraîné un
double gratuit.

Désormais, les descripteurs de répertoire sont correctement clonés sous Windows et sur les systèmes dotés d'un
fonction "fchdir". Sur d'autres systèmes, les nouveaux threads n'héritent tout simplement pas du répertoire
handles de leurs threads parents [perl #75154].

· Le typeglob "*," qui contient la variable scalaire $, (séparateur de champ de sortie), avait
le mauvais nombre de références dans les threads enfants.

· [perl #78494] Lorsque les canaux sont partagés entre les threads, la fonction "fermer" (et tout
la fermeture implicite, comme à la sortie du thread) ne bloque plus.

· Perl fait maintenant un nettoyage en temps opportun des SV qui sont clonés dans un nouveau thread mais ensuite
découverts orphelins (c'est-à-dire que leurs propriétaires sont pas cloné). Cela élimine
plusieurs avertissements de "fuites scalaires" lors de la jonction de threads.

Scoping et Sous-programmes
· Les sous-routines Lvalue sont à nouveau capables de renvoyer des scalaires de copie sur écriture. Cela avait été
cassé depuis la version 5.10.0 [perl #75656] (5.12.3).

· "require" n'entraîne plus "l'appelant" à renvoyer le mauvais nom de fichier pour la portée qui
appelé "require" et d'autres portées supérieures qui avaient le même nom de fichier [perl #68712].

· "sort" avec une routine de comparaison prototypée "($$)" utilisée pour amener la valeur de @_ à
fuite hors du genre. Prendre une référence à @_ dans la routine de tri pourrait provoquer
un plantage [perl #72334].

· Les variables de correspondance (comme $1) ne persistent plus entre les appels à une sous-routine de tri [perl
#76026].

· L'itération avec "foreach" sur un tableau renvoyé par un sous-ensemble lvalue fonctionne maintenant [perl
#23790].

· $@ est maintenant localisé lors des appels à "binmode" pour empêcher toute action à distance [perl
#78844].

· Appeler un prototype de fermeture (ce qui est passé à un gestionnaire d'attributs pour une fermeture) maintenant
génère un message d'erreur "Prototype de fermeture appelé" au lieu d'un plantage [perl
#68560].

· Mentionner une variable lexicale en lecture seule de la portée englobante dans une chaîne "eval" non
long rend la variable accessible en écriture [perl #19135].

Signalétique
· Dans les gestionnaires de signaux, $! est maintenant implicitement localisé.

· Les signaux CHLD ne sont plus débloqués après l'appel d'un gestionnaire de signal s'ils étaient
bloqué auparavant par "POSIX::sigprocmask" [perl #82040].

· Un gestionnaire de signal appelé dans un gestionnaire de signal peut provoquer des fuites ou des doubles libérations.
Maintenant corrigé [perl #76248].

Divers Mémoire Fuites
· Plusieurs fuites de mémoire lors du chargement des modules XS ont été corrigées (5.12.2).

· substr (), pos (), clés()et la bien-aimée Sonate en la majeur vec() pourrait, lorsqu'il est utilisé en combinaison avec lvalues,
entraîner une fuite de la valeur scalaire sur laquelle ils opèrent et provoquer sa destruction
arriver trop tard. Cela a maintenant été corrigé.

· Les opérateurs de post-incrémentation et de post-décrémentation, "++" et "--", utilisés pour provoquer des fuites lorsque
utilisé sur les références. Cela a maintenant été corrigé.

· Les blocs "map" et "grep" imbriqués ne fuient plus la mémoire lors du traitement de grandes listes [perl
#48004].

· "utiliser VERSION" et non VERSION" plus de fuite de mémoire [perl #78436] [perl #69050].

· ".=" suivi de "<>" ou "readline" entraînerait une fuite de mémoire si $/ contenait des caractères
au-delà de la plage d'octets et le scalaire attribué à s'est avéré être encodé en UTF8
en interne [perl #72246].

· "eval 'BEGIN{die}'" ne perd plus de mémoire sur les builds non-threadés.

Mémoire la corruption et Crashes
· globe () ne plante plus lorsque %File::Glob:: est vide et que "CORE::GLOBAL::glob" ne l'est pas
présent [perl #75464] (5.12.2).

· lire la ligne() a été corrigé lorsqu'il est interrompu par des signaux afin qu'il ne renvoie plus le
"même chose" qu'avant ou mémoire aléatoire.

· Lors de l'affectation d'une liste avec des clés dupliquées à un hachage, l'affectation utilisée pour renvoyer
valeurs parasites et/ou libérées :

@a = %h = (liste avec quelques clés en double) ;

Ceci a maintenant été corrigé [perl #31865].

· Le mécanisme de libération d'objets dans les globs utilisé pour laisser des pointeurs pendants sur libérés
SV, ce qui signifie que les utilisateurs de Perl pourraient voir l'état corrompu lors de la destruction.

Perl libère désormais uniquement les slots affectés du GV, au lieu de libérer le GV lui-même.
Cela garantit qu'il n'y a pas de références pendantes ou d'état corrompu lors de la destruction.

· L'interpréteur ne plante plus lors de la libération de tableaux de tableaux profondément imbriqués. Hachages
n'ont pas encore été corrigés [perl #44225].

· La concaténation de chaînes longues sous "utiliser l'encodage" ne provoque plus le plantage de Perl [perl
#78674].

· Appeler "->import" sur une classe dépourvue de méthode d'importation pourrait corrompre la pile,
entraînant un comportement étrange. Par exemple,

push @a, "foo", $b = bar->import ;

assignerait "foo" à $b [perl #63790].

· La fonction "recv" pouvait planter lorsqu'elle était appelée avec le drapeau MSG_TRUNC [perl #75082].

· "formline" ne se bloque plus lorsqu'il est passé une image de format entachée. Il entache également $^A
maintenant si ses arguments sont corrompus [perl #79138].

· Un bogue dans la façon dont nous traitons les opérations de test de fichier pourrait provoquer une erreur de segmentation. Les tests de fichiers ne le font pas
attendez toujours une opération sur la pile, nous n'utilisons donc maintenant les TOP que si nous sommes sûrs que nous ne sommes pas
"stat" le handle de fichier "_". Ceci est indiqué par "OPf_KIDS" (comme vérifié dans ck_ftst)
[perl #74542] (5.12.1).

· déballer() gère désormais correctement le contexte scalaire pour %32H et %32u, corrigeant un potentiel
crash. diviser() planterait parce que le troisième élément de la pile n'était pas le normal
expression qu'il attendait. "unpack("%2H", ...)" renverrait à la fois le résultat décompressé
et la somme de contrôle sur la pile, comme le ferait "unpack("%2u", ...)" [perl #73814] (5.12.2).

Correctifs à Divers Perl Les opérateurs
· Les opérateurs "&", "|" et "^" au niveau du bit ne forcent plus les arguments en lecture seule [perl
#20661].

· Stringifier un scalaire contenant "-0.0" n'a plus pour effet de transformer faux en
vrai [perl #45133].

· Certains opérateurs numériques convertissaient des nombres entiers en virgule flottante, entraînant une perte
de précision sur les plates-formes 64 bits [perl #77456].

· sprintf() ignorait les locales lorsqu'il était appelé avec des arguments constants [perl #78632].

· La combinaison de l'indicateur de vecteur (%v) et de la précision dynamique entraînerait la confusion de "sprintf"
l'ordre de ses arguments, lui faisant traiter la chaîne comme la précision et vice-versa
[perl #83194].

Bugs En relation à le C API
· La fonction "lex_stuff_pvn" de niveau C provoquait parfois une fausse erreur de syntaxe sur
la dernière ligne du fichier s'il manque un point-virgule final [perl #74006] (5.12.1).

· Les fonctions C "eval_sv" et "eval_pv" définissent maintenant $@ correctement lorsqu'il y a une syntaxe
erreur et aucun indicateur "G_KEEPERR", et ne jamais le définir si l'indicateur "G_KEEPERR" est présent
[perl #3719].

· L'API multi-appel XS ne fait plus perdre le nombre de références aux sous-programmes s'ils sont appelés
via l'interface multi-appel à partir de ces mêmes sous-programmes. Cela affecte les modules
comme List :: Util. Appel d'une de ses fonctions avec un sous-programme actif comme premier
peut provoquer un plantage [perl #78070].

· La fonction "SvPVbyte" disponible pour les modules XS appelle maintenant la magie avant de rétrograder le
SV, pour éviter les avertissements sur les caractères larges [perl #72398].

· Les types ref dans le typemap pour les liaisons XS prennent désormais en charge les variables magiques [perl
#72684].

· "sv_catsv_flags" n'appelle plus "mg_get" sur son deuxième argument (la chaîne source)
si les drapeaux qui lui sont passés n'incluent pas SV_GMAGIC. Elle correspond donc désormais à la
Documentation.

· "my_strftime" ne perd plus de mémoire. Cela corrige une fuite de mémoire dans "POSIX :: strftime"
[perl #73520].

· XSUB.h redéfinit désormais correctement fgets sous PERL_IMPLICIT_SYS [perl #55049] (5.12.1).

· Code XS utilisant fputc() or fputs() sous Windows pourrait provoquer une erreur en raison de leur
arguments échangés [perl #72704] (5.12.1).

· Une erreur de segmentation possible dans le typemap par défaut "T_PTROBJ" a été corrigée (5.12.2).

· Un bogue pouvant provoquer des messages "Erreur inconnue" lorsque "call_sv(code, G_EVAL)" est appelé
d'un destructeur XS a été corrigé (5.12.2).

Connu Problèmes


Il s'agit d'une liste de problèmes importants non résolus qui sont des régressions par rapport à des problèmes antérieurs.
versions de Perl ou qui affectent les modules CPAN largement utilisés.

· "List::Util::first" se comporte mal en présence d'un $_ lexical (généralement introduit
par "mon $_" ou implicitement par "donné"). La variable qui est définie pour chaque itération
est la variable de package $_, pas le lexical $_.

Un problème similaire peut se produire dans d'autres modules qui fournissent des fonctions qui prennent un bloc
comme premier argument, comme

liste de trucs { ... $_ ...}

Voir également:http://rt.perl.org/rt3/Public/Bug/Display.html?id=67694>

· lire la ligne() renvoie une chaîne vide au lieu d'une valeur précédente mise en cache lorsqu'elle est
interrompu par un signal

· Les changements dans la gestion des prototypes cassent Switch. Un patch a été envoyé en amont et
apparaîtra bientôt sur CPAN, espérons-le.

· La mise à niveau vers ExtUtils-MakeMaker-6.57_05 a provoqué des tests dans le Module-Installer
distribution sur CPAN échoue. (Spécifiquement, 02_mymeta.t essais 5 et 21 ; 18_all_from.t
essais 6 et 15 ; 19_auteurs.t essais 5, 13, 21 et 29 ; et
20_auteurs_avec_caractères_spéciaux.t tests 6, 15 et 23 dans la version 1.00 de ce
la distribution échoue maintenant.)

· Sur VMS, les tests "Time::HiRes" échoueront en raison d'un bogue dans l'implémentation du CRTL de
"setitimer": les valeurs de minuterie précédentes seraient effacées si une minuterie expirait mais pas si le
la minuterie a été réinitialisée avant son expiration. HP OpenVMS Engineering a corrigé le problème
et publiera un correctif en temps voulu (affaire Quix # QXCM1001115136).

· Sur VMS, il y avait une poignée d'échecs de test "Module :: Build" auxquels nous n'avions pas accès auparavant
La version; veuillez regarder CPAN pour les mises à jour.

Errata


clés(), valeurs (), et chaque() travail on tableaux
Vous pouvez maintenant utiliser le clés(), valeurs ()et la bien-aimée Sonate en la majeur chaque() fonctions intégrées sur les tableaux ; auparavant, vous pouviez
utilisez-les uniquement sur les hachages. Voir perlfunc pour plus de détails. Il s'agit en fait d'un changement introduit
dans perl 5.12.0, mais il a été omis de perl5120delta de cette version.

diviser() et @_
diviser() ne modifie plus @_ lorsqu'il est appelé dans un contexte scalaire ou vide. Dans un contexte de vide, il
produit maintenant un avertissement "Utilisation inutile de split". C'était aussi un changement perl 5.12.0 qui
raté le perldelta.

Nécrologie


Randy Kobes, créateur de http://kobesearch.cpan.org/ et contributeur/mainteneur de plusieurs
modules de base de la chaîne d'outils Perl, est décédé le 18 septembre 2010 après une bataille avec le poumon
cancer. La communauté était plus riche de son implication. Il va nous manquer.

Remerciements


Perl 5.14.0 représente un an de développement depuis Perl 5.12.0 et contient près de
550,000 3,000 lignes de modifications sur près de 150 XNUMX fichiers de XNUMX auteurs et committers.

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

Aaron Crane, Abhijit Menon-Sen, Abigail, AEvar Arnfjoer` Bjarmason, Alastair Douglas,
Alexander Alekseev, Alexander Hartmaier, Alexandr Ciornii, Alex Davies, Alex Vandiver, Ali
Polatel, Allen Smith, Andreas Koenig, Andrew Rodland, Andy Armstrong, Andy Dougherty,
Aristote Pagaltzis, Arkturuz, Arvan, A. Sinan Unur, Ben Morrow, Bo Lindbergh, Boris
Ratner, Brad Gilbert, Bram, Brian d Foy, Brian Phillips, Casey West, Charles Bailey, Chas.
Owens, Chip Salzenberg, Chris 'BinGOs' Williams, chromatique, Craig A. Berry, Curtis Jewell,
Dagfinn Ilmari Mannsaaker, Dan Dascalescu, Dave Rolsky, David Caldwell, David Cantrell,
David Golden, David Leadbeater, David Mitchell, David Wheeler, Eric Brine, Père
Chrysostomos, Fingle Nark, Florian Ragwitz, Frank Wiegand, Franz Fasching, Gene Sullivan,
George Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Grant McLean, Gregor Herrmann,
Marque H.Merijn, Hongwen Qiu, Hugo van der Sanden, Ian Goodacre, James E Keenan, James
Mastros, Jan Dubois, Jay Hannah, Jerry D. Hedden, Jesse Vincent, Jim Cromie, Jirka HruXka,
John Peacock, Joshua ben Jore, Joshua Pritikin, Karl Williamson, Kevin Ryde, kmx, Lars
DXXXXXX XXX, Larwan Berke, Léon Brocard, Léon Timmermans, Lubomir Rintel, Lukas Mai, Maik
Hentsche, Marty Pauley, Marvin Humphrey, Matt Johnson, Matt S Trout, Max Maischein,
Michael Breen, Michael Fig, Michael G Schwern, Michael Parker, Michael Stevens, Michael
Witten, Mike Kelly, Moritz Lenz, Nicholas Clark, Nick Cleaton, Nick Johnston, Nicolas
Kaiser, Niko Tyni, Noirin Shirley, Nuno Carvalho, Paul Evans, Paul Green, Paul Johnson,
Paul Marquess, Peter J. Holzer, Peter John Acklam, Peter Martini, Philippe Bruhat (Livre),
Piotr Fusik, Rafael Garcia-Suarez, Rainer Tammer, Reini Urban, Renee Baecker, Ricardo
Signes, Richard Moehn, Richard Soderberg, Rob Hoelz, Robin Barker, Ruslan Zakirov,
Salvador Fandin~o, Salvador Ortiz Garcia, Shlomi Fish, Sinan Unur, Sisyphe, Slaven Rezic,
Steffen Mueller, Steve Hay, Steven Schubiger, Steve Peters, Sullivan Beck, Tatsuhiko
Miyagawa, Tim Bunce, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook, Tye McQueen,
Vadim Konovalov, Vernon Lyon, Vincent Pit, Walt Mankowski, Wolfram Humann, Yves Orton,
Zefram et Zsban Ambrus.

Ceci est terriblement incomplet car il est automatiquement généré à partir de l'historique du contrôle de version.
En particulier, il n'inclut pas les noms des contributeurs (très appréciés)
qui a signalé des problèmes dans les versions précédentes de Perl qui ont contribué à améliorer Perl 5.14.0. Pour
une liste plus complète de tous les contributeurs historiques de Perl, veuillez consulter les "AUTEURS"
dans la distribution Perl 5.14.0.

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.

Reporting Bugs


Si vous trouvez ce que vous pensez être un bogue, vous pouvez consulter les articles récemment publiés sur le
le groupe de discussion comp.lang.perl.misc et la base de données de bogues Perl sur 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 committers, qui sont en mesure d'aider à évaluer l'impact de
problèmes, trouver une solution et aider à coordonner la publication de correctifs pour atténuer
ou résolvez le problème sur toutes les plates-formes sur lesquelles Perl est pris en charge. Veuillez utiliser ceci
adresse pour les problèmes de sécurité dans le noyau Perl uniquement, pas pour les modules indépendamment
distribué sur CPAN.

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


Serveurs et postes de travail gratuits

Télécharger des applications Windows et Linux

Commandes Linux

Ad




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