Il s'agit de la commande perl5100delta 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
perl5100delta - quoi de neuf pour Perl 5.10.0
DESCRIPTION
Ce document décrit les différences entre la version 5.8.8 et la version 5.10.0.
De nombreuses corrections de bogues dans la version 5.10.0 étaient déjà visibles dans les versions de maintenance 5.8.X ; ils
ne sont pas dupliqués ici et sont documentés dans l'ensemble de pages de manuel nommé
perl58[1-8]?delta.
Core Améliorations
Le site de "caractéristique" Pragma
Le pragma "feature" est utilisé pour activer une nouvelle syntaxe qui briserait le fonctionnement inverse de Perl.
compatibilité avec les anciennes versions du langage. C'est un pragma lexical, comme « strict » ou
"avertissements".
Actuellement, les nouvelles fonctionnalités suivantes sont disponibles : "switch" (ajoute une instruction switch),
"say" (ajoute une fonction intégrée "say") et "state" (ajoute un mot-clé "state" pour déclarer
variables "statiques"). Ces fonctionnalités sont décrites dans leurs propres sections de ce document.
Le pragma "feature" est également implicitement chargé lorsque vous avez besoin d'une version Perl minimale
(avec la construction "use VERSION") supérieur ou égal à 5.9.5. Voir la fonctionnalité pour
détails.
New -E de ligne de commande interrupteur
-E équivaut à -e, mais il active implicitement toutes les fonctionnalités facultatives (comme "utiliser la fonctionnalité
":5.10"").
Défini-ou opérateur
Un nouvel opérateur "//" (défini-ou) a été implémenté. L'expression suivante :
$une // $b
est simplement équivalent à
défini $a ? $a : $b
et la déclaration
$c //= $d;
peut maintenant être utilisé à la place de
$c = $d sauf si défini $c ;
L'opérateur "//" a la même priorité et la même associativité que "||". Des soins particuliers ont
été prises pour garantir que cet opérateur fasse ce que vous voulez dire sans casser l'ancien code, mais
certains cas extrêmes impliquant l'expression régulière vide peuvent désormais être analysés différemment. Voir
perlop pour plus de détails.
Basculer et Smart Match opérateur
Perl 5 a maintenant une instruction switch. Il est disponible lorsque "utiliser la fonctionnalité 'switch'" est activé
effet. Cette fonctionnalité introduit trois nouveaux mots-clés, "donné", "quand" et "par défaut" :
donné ($foo) {
quand (/^abc/) { $abc = 1; }
quand (/^def/) { $def = 1; }
quand (/^xyz/) { $xyz = 1; }
par défaut { $rien = 1 ; }
}
Une description plus complète de la façon dont Perl fait correspondre la variable switch avec le "quand"
les conditions sont données dans "Instructions Switch" en perlsyn.
Ce genre de match s'appelle smart rencontre, et il est également possible de l'utiliser en dehors de
instructions switch, via le nouvel opérateur "~~". Voir « Correspondance intelligente en détail » dans Perlsyn.
Cette fonctionnalité a été contribuée par Robin Houston.
Régulier expressions
Modèles récursifs
Il est désormais possible d'écrire des modèles récursifs sans utiliser la construction "(??{})".
Cette nouvelle méthode est plus efficace et, dans de nombreux cas, plus facile à lire.
Chaque parenthèse de capture peut désormais être traitée comme un motif indépendant qui peut être
saisi en utilisant la syntaxe "(?PARNO)" ("PARNO" signifiant "numéro de parenthèse").
Par exemple, le modèle suivant correspondra aux équerres équilibrées imbriquées :
/
^ # début de ligne
( # démarrer le tampon de capture 1
< # correspond à une équerre ouvrante
(? : # correspond à l'un des :
(?> # ne revenez pas en arrière sur l'intérieur de ce groupe
[^<>]+ # un ou plusieurs crochets non angulaires
) # mettre fin au groupe sans retour en arrière
| # ... ou ...
(?1) # revenez au support 1 et réessayez
)* # 0 fois ou plus.
> # correspond à un crochet fermant
) # fin du tampon de capture un
$ # fin de ligne
/x
Les utilisateurs de PCRE doivent noter que la fonctionnalité regex récursive de Perl permet de revenir en arrière dans un
modèle récursif, alors que dans PCRE, la récursivité est de nature atomique ou « possessive ».
Comme dans l'exemple ci-dessus, vous pouvez ajouter (?>) pour contrôler cela de manière sélective. (Yves Orton)
Tampons de capture nommés
Il est désormais possible de nommer des parenthèses de capture dans un motif et de faire référence au
contenu capturé par son nom. La syntaxe de dénomination est "(? ....)". Il est possible de
référence en arrière à un tampon nommé avec le "\k " syntaxe. Dans le code, la nouvelle magie
Les hachages "%+" et "%-" peuvent être utilisés pour accéder au contenu des tampons de capture.
Ainsi, pour remplacer tous les caractères doublés par une seule copie, on pourrait écrire
s/(? .)\k /$+{lettre}/g
Seuls les tampons avec un contenu défini seront "visibles" dans le hachage "%+", donc c'est
possible de faire quelque chose comme
foreach mon $name (clés %+) {
print "le contenu du tampon '$name' est $+{$name}\n";
}
Le hachage "%-" est un peu plus complet, puisqu'il contiendra des références de tableau contenant des valeurs
de tous les tampons de capture portant le même nom, s'il y en a beaucoup.
"%+" et "%-" sont implémentés sous forme de hachages liés via le nouveau module
"Tie :: Hash :: NamedCapture".
Les utilisateurs exposés au moteur .NET regex constateront que l'implémentation de Perl diffère
en ce que l'ordre numérique des tampons est séquentiel et non "sans nom en premier,
puis nommé". Ainsi dans le modèle
/(UNE)(? B)(C)(? D)/
1 $ sera « A », 2 $ sera « B », 3 $ sera « C » et 4 $ sera « D » et non 1 $ sera « A »,
2 $ correspond à "C", 3 $ à "B" et 4 $ à "D" auxquels un programmeur .NET s'attendrait. C'est
considéré comme une fonctionnalité. :-) (Yves Orton)
Quantificateurs possessifs
Perl prend désormais en charge la syntaxe « quantificateur possessif » du modèle « correspondance atomique ».
Fondamentalement, un quantificateur possessif correspond autant qu'il le peut et ne rend jamais rien en retour.
Ainsi, il peut être utilisé pour contrôler le retour en arrière. La syntaxe est similaire à non gourmande
correspondance, sauf qu'au lieu d'utiliser un '?' comme modificateur, le « + » est utilisé. Ainsi "?+",
"*+", "++", "{min,max}+" sont désormais des quantificateurs légaux. (Yves Orton)
Retour en arrière des verbes de contrôle
Le moteur d'expression régulière prend désormais en charge un certain nombre de verbes de contrôle de retour en arrière à usage spécial :
(*PUIS), (*PRUNE), (*MARK), (*SKIP), (*COMMIT), (*FAIL) et (*ACCEPT). Voir perlre pour
leurs descriptions. (Yves Orton)
Références relatives relatives
Une nouvelle syntaxe "\g{N}" ou "\gN" où "N" est un entier décimal permet une forme plus sûre de
notation de référence arrière ainsi que l'autorisation de références arrière relatives. Cela devrait faire
il est plus facile de générer et d'intégrer des modèles contenant des références arrière. Voir « Capturer
buffers" en perlre. (Yves Orton)
Échappement "\K"
La fonctionnalité du module Regexp::Keep de Jeff Pinyan a été ajoutée au noyau. Dans
expressions régulières, vous pouvez maintenant utiliser l'échappement spécial "\K" pour faire quelque chose
comme un regard positif de longueur flottante. Il est également utile dans les substitutions telles que :
s/(foo)bar/$1/g
qui peut maintenant être converti en
s/foo\Kbar//g
ce qui est beaucoup plus efficace. (Yves Orton)
Espaces verticaux et horizontaux et sauts de ligne
Les expressions régulières reconnaissent désormais les échappements "\v" et "\h" qui correspondent aux lignes verticales et verticales.
espaces horizontaux, respectivement. "\V" et "\H" correspondent logiquement à leurs compléments.
"\R" correspond à un saut de ligne générique, c'est-à-dire un espace vertical, plus le multi-
séquence de caractères "\x0D\x0A".
Captures facultatives avant et après le match avec l'indicateur /p
Il existe un nouvel indicateur "/p" pour les expressions régulières. L'utilisation de ceci rend le moteur
conserver une copie de la partie de la chaîne correspondante avant la sous-chaîne correspondante dans le
nouvelle variable spéciale "${^PREMATCH}", la partie après la sous-chaîne correspondante à
"${^POSTMATCH}", et la sous-chaîne correspondante elle-même à "${^MATCH}".
Perl est toujours capable de stocker ces sous-chaînes dans les variables spéciales "$`", "$'", $&,
mais l'utilisation de ces variables n'importe où dans le programme ajoute une pénalité à toutes les variables régulières.
l'expression correspond, alors que si vous utilisez le drapeau "/p" et les nouvelles variables spéciales
au lieu de cela, vous payez uniquement pour les expressions régulières dans lesquelles l'indicateur est utilisé.
Pour plus de détails sur les nouvelles variables, voir perlvar ; pour l'utilisation du régulier
drapeau d'expression, voir perlop et perlre.
"dire()"
dire() est un nouveau module intégré, disponible uniquement lorsque "utiliser la fonctionnalité 'dire'" est en vigueur, c'est-à-dire
similaire à impression(), mais cela ajoute implicitement une nouvelle ligne à la chaîne imprimée. Voir "dire"
en perlfunc. (Robin Houston)
Lexical $_
La variable par défaut $_ peut désormais être lexicalisée, en la déclarant comme n'importe quelle autre variable lexicale.
variable, avec un simple
mon $_ ;
Les opérations par défaut sur $_ utiliseront la version de portée lexicale de $_ lorsqu'elles seront exécutées.
existe, au lieu du $_ global.
Dans un bloc "map" ou "grep", si $_ a déjà été my'ed, alors le $_ à l'intérieur du bloc est
lexical également (et étendu au bloc).
Dans un scope où $_ a été lexicalisé, vous pouvez toujours avoir accès à la version globale
de $_ en utilisant $::_, ou, plus simplement, en remplaçant la déclaration lexicale par « notre $_ ».
(Rafael Garcia-Suarez)
Le site de "_" prototype
Un nouveau personnage prototype a été ajouté. "_" est équivalent à "$" mais la valeur par défaut est $_ si
l'argument correspondant n'est pas fourni ("$" et "_" désignent tous deux un scalaire). En raison de
caractère facultatif de l'argument, vous ne pouvez l'utiliser qu'à la fin d'un prototype, ou avant
un point-virgule.
Cela a une petite conséquence incompatible : le prototype() fonction a été ajustée pour
renvoie "_" pour certains éléments intégrés dans les cas appropriés (par exemple,
"prototype('CORE::rmdir')"). (Rafael Garcia-Suarez)
CONTROLE UNITE blocs
"UNITCHECK", un nouveau bloc de code spécial a été introduit, en plus de "BEGIN",
"CHECK", "INIT" et "END".
Les blocs "CHECK" et "INIT", bien qu'utiles à certaines fins spécialisées, sont toujours exécutés
à la transition entre la compilation et l'exécution du programme principal, et donc
sont inutiles chaque fois que le code est chargé au moment de l’exécution. En revanche, les blocs "UNITCHECK" sont
exécutés juste après la compilation de l'unité qui les a définis. Voir perlmod pour en savoir plus
information. (Alex Gough)
New Pragma, "mr"
Un nouveau pragma, "mro" (pour Method Resolution Order) a été ajouté. Il permet d'allumer, d'allumer
par classe, l'algorithme que Perl utilise pour trouver les méthodes héritées en cas de problème.
hiérarchie d'héritage multiple. Le MRO par défaut n'a pas changé (DFS, pour Depth First
Recherche). Un autre MRO est disponible : l’algorithme C3. Voir mro pour plus d'informations.
(Brandon Noir)
Notez qu'en raison de changements dans l'implémentation de la recherche hiérarchique de classes, le code utilisé
pour annuler la définition du glob *ISA, il est fort probable que cela se brise. Quoi qu'il en soit, sans définition, *ISA avait le côté-
effet de supprimer la magie sur le tableau @ISA et n'aurait pas dû être fait au début
lieu. De plus, le cache *::ISA::CACHE:: n'existe plus ; pour forcer la réinitialisation du cache @ISA,
il faut maintenant utiliser l'API "mro", ou plus simplement assigner à @ISA (par exemple avec "@ISA =
@EST UN").
readdir () 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. retourner a "court nom de fichier" on Windows
Le site de readdir () La fonction peut renvoyer un "nom de fichier court" lorsque le nom de fichier long contient
caractères en dehors de la page de codes ANSI. De la même manière Cwd ::cwd() peut renvoyer un court répertoire
nom et globe () peut également renvoyer des noms courts. Sur le système de fichiers NTFS, ces courts
les noms peuvent toujours être représentés dans la page de codes ANSI. Cela ne sera pas vrai pour tous les autres
pilotes de système de fichiers ; par exemple, le système de fichiers FAT stocke les noms de fichiers courts dans la page de codes OEM,
Ainsi, certains fichiers sur les volumes FAT restent inaccessibles via les API ANSI.
De même, $^X, @INC et $ENV{PATH} sont prétraités au démarrage pour garantir que tous les chemins
sont valides dans la page de codes ANSI (si possible).
Le site de Win32 :: GetLongPathName() la fonction renvoie désormais le nom de fichier long correct encodé en UTF-8
au lieu d'utiliser des caractères de remplacement pour forcer le nom dans la page de codes ANSI. Le nouveau
Win32 :: GetANSIPathName () la fonction peut être utilisée pour transformer un chemin long en un chemin court
seulement si le long ne peut pas être représenté dans la page de codes ANSI.
De nombreuses autres fonctions du module "Win32" ont été améliorées pour accepter l'encodage UTF-8
arguments. Veuillez consulter Win32 pour plus de détails.
lire le tube() is maintenant contournable
La fonction intégrée lire le tube() est désormais annulable. Le contourner permet également de
remplacer son homologue opérateur, "qx//" (alias "``"). De plus, la valeur par défaut est désormais $_
si aucun argument n'est fourni. (Rafael Garcia-Suarez)
Réglage par défaut argument pour lire la ligne()
lire la ligne() la valeur par défaut est désormais *ARGV si aucun argument n'est fourni. (Rafael Garcia-Suarez)
Etat() les variables
Une nouvelle classe de variables a été introduite. Les variables d'état sont similaires à "mon"
variables, mais sont déclarées avec le mot clé "state" à la place de "my". Ils sont visibles
uniquement dans leur portée lexicale, mais leur valeur est persistante : contrairement à « mes » variables, elles sont
pas indéfini à l’entrée de la portée, mais conservent leur valeur précédente. (Rafael Garcia-Suarez,
Nicolas Clark)
Pour utiliser des variables d'état, il faut les activer en utilisant
utiliser la fonctionnalité « état » ;
ou en utilisant le commutateur de ligne de commande "-E" dans les one-liners. Voir « Privé persistant
Variables" en perlsub.
Stacked test de filet opérateurs
En tant que nouvelle forme de sucre syntaxique, il est désormais possible d'empiler les opérateurs de test de filet. Toi
peut maintenant écrire "-f -w -x $file" dans une rangée pour signifier "-x $file && -w _ && -f _". Voir "-X" dans
perfunc.
UNIVERSEL::FAIT()
La classe "UNIVERSAL" possède une nouvelle méthode, "DOES()". Il a été ajouté pour résoudre la sémantique
problèmes avec la méthode "isa()". "isa()" vérifie l'héritage, tandis que "DOES()" a été
conçu pour être remplacé lorsque les auteurs de modules utilisent d'autres types de relations entre les classes
(en plus de l'héritage). (chromatique)
Voir "$obj->DOES( ROLE )" dans UNIVERSEL.
Formats
Les formats ont été améliorés de plusieurs manières. Un nouveau champ, "^*", peut être utilisé pour la largeur variable,
texte une ligne à la fois. Les caractères nuls sont désormais gérés correctement dans les lignes d'image. En utilisant
"@#" et "~~" ensemble produiront désormais une erreur de compilation, car ces champs de format sont
incompatible. perlform a été amélioré et divers bugs corrigés.
Ordre des octets modificateurs pour paquet() et déballer()
Il existe deux nouveaux modificateurs d'ordre des octets, ">" (gros-boutiste) et "<" (petit-boutiste), qui peuvent
être annexé à la plupart paquet() et déballer() caractères et groupes de modèles pour forcer un certain
l'ordre des octets pour ce type ou ce groupe. Voir "pack" dans perlfunc et perlpacktut pour plus de détails.
"non VERSION"
Vous pouvez maintenant utiliser "non" suivi d'un numéro de version pour spécifier que vous souhaitez utiliser un
version de perl plus ancienne que celle spécifiée.
"chdir", "chmod" et "chown" on descripteurs de fichiers
"chdir", "chmod" et "chown" peuvent désormais fonctionner sur les descripteurs de fichiers ainsi que sur les noms de fichiers, si le
le système supporte respectivement "fchdir", "fchmod" et "fchown", grâce à un patch fourni
par Gisle Aas.
OS groupes
$( et $) renvoient désormais les groupes dans l'ordre dans lequel le système d'exploitation les renvoie, grâce à Gisle Aas.
Ce n'était pas le cas auparavant.
Récursif sort sous-marins
Vous pouvez désormais utiliser des sous-programmes récursifs avec sorte(), grâce à Robin Houston.
Exceptions in constant pliage
La routine de pliage constant est maintenant enveloppée dans un gestionnaire d'exceptions, et si le pliage lève
une exception (comme tenter d'évaluer 0/0), perl conserve maintenant l'optree actuel,
plutôt que d'abandonner tout le programme. Sans ce changement, les programmes ne compileraient pas
s'ils avaient des expressions qui généraient des exceptions, même si celles-ci
les expressions étaient dans du code qui ne pouvait jamais être atteint au moment de l'exécution. (Nicholas Clark, Dave
Mitchell)
Source filtres in @INC
Il est possible d'améliorer le mécanisme des crochets de sous-routine dans @INC en ajoutant une source
filtre au-dessus du descripteur de fichier ouvert et renvoyé par le hook. Cette fonctionnalité était prévue
il y a longtemps, mais ne fonctionnait pas tout à fait jusqu'à maintenant. Voir "exiger" dans perlfunc pour
des détails. (Nicolas Clark)
New interne les variables
"${^RE_DEBUG_FLAGS}"
Cette variable contrôle quels indicateurs de débogage sont en vigueur pour l'expression régulière
moteur lorsqu'il fonctionne sous "use re "debug"". Voir re pour plus de détails.
"${^CHILD_ERROR_NATIVE}"
Cette variable donne l'état natif renvoyé par la dernière fermeture de tube, backtick
commande, appel réussi à attendre() or pid d'attente ()Ou de la système() opérateur. Voir
perlvar pour plus de détails. (Contribué par Gisle Aas.)
"${^RE_TRIE_MAXBUF}"
Voir "Optimisation Trie des alternances de chaînes littérales".
"${^WIN32_SLOPPY_STAT}"
Voir « Statistiques bâclées sous Windows ».
Divers
"unpack()" décompresse désormais par défaut la variable $_.
"mkdir()" sans arguments est désormais par défaut $_.
La sortie de vidage interne a été améliorée, de sorte que les caractères non imprimables tels que
la nouvelle ligne et le retour arrière sont affichés en notation "\x", plutôt qu'en octal.
Le site de -C L'option "#!" ne peut plus être utilisée sur le "#!" doubler. De toute façon, ça ne marchait pas là-bas,
puisque les flux standards sont déjà configurés à ce stade de l'exécution de Perl
interprète. Vous pouvez utiliser binmode() au lieu d'obtenir le comportement souhaité.
UCD 5.0.0
La copie de la base de données de caractères Unicode incluse dans Perl 5 a été mise à jour vers la version
5.0.0.
MAD
MAD, qui signifie Divers Attribut Décoration, est un travail encore en développement
menant à un convertisseur Perl 5 vers Perl 6. Pour l'activer, il faut passer l'argument
"-Dmad" à configurer. Le Perl obtenu n'est pas compatible binaire avec un Perl 5.10 classique,
et a des pénalités d'espace et de vitesse ; de plus, tous les tests de régression ne réussissent pas encore.
(Larry Wall, Nicolas Clark)
tuer() on Windows
Sur les plateformes Windows, "kill(-9, $pid)" tue désormais une arborescence de processus. (Sous Unix, cela donne
le signal à tous les processus dans le même groupe de processus.)
Incompatible Modifications
Emballage et UTF-8 instruments à cordes
La sémantique de paquet() et déballer() concernant les données codées en UTF-8 a été modifié.
Le traitement s'effectue désormais par défaut caractère par caractère au lieu d'octet par octet sur le
encodage sous-jacent. Notamment, le code qui utilisait des éléments comme "pack("a*", $string)" pour voir
via l'encodage de la chaîne, vous récupérerez simplement la chaîne $ d'origine. Emballé
les chaînes peuvent également être mises à niveau pendant le traitement lorsque vous stockez des caractères mis à niveau. Toi
peut obtenir l'ancien comportement en utilisant "use bytes".
Pour être cohérent avec paquet(), le "C0" dans déballer() modèles indique que les données doivent être
être traité en mode caractère, c'est-à-dire caractère par caractère ; au contraire, "U0" dans
déballer() indique le mode UTF-8, dans lequel la chaîne compressée est traitée dans son format codé en UTF-8.
Forme Unicode octet par octet. Ceci est inversé en ce qui concerne Perl 5.8.X, mais maintenant
cohérent entre paquet() et déballer().
De plus, « C0 » et « U0 » peuvent également être utilisés dans paquet() modèles à préciser respectivement
modes caractère et octet.
"C0" et "U0" au milieu d'un format d'emballage ou de décompression passent désormais au format spécifié
mode d'encodage, honorant le regroupement des parens. Auparavant, les parents étaient ignorés.
Il y a aussi un nouveau paquet() format de caractère, "W", qui est destiné à remplacer l'ancien
"C". "C" est conservé pour les caractères non signés codés sous forme d'octets dans la représentation interne des chaînes.
"W" représente des valeurs de caractères non signés (logiques), qui peuvent être supérieures à 255. Il s'agit de
donc plus robuste lorsqu'il s'agit de données potentiellement codées en UTF-8 (car "C" enveloppera
valeurs en dehors de la plage 0..255, et ne respectent pas l'encodage de la chaîne).
En pratique, cela signifie que les formats de pack sont désormais neutres en termes d'encodage, à l'exception du "C".
Par souci de cohérence, "A" dans déballer() Le format supprime désormais tous les espaces Unicode à partir de la fin de
la chaîne. Avant Perl 5.9.2, il supprimait uniquement les caractères spatiaux ASCII classiques.
Octet/caractère compter caractéristique in déballer()
Une nouvelle déballer() le caractère de modèle, ".", renvoie le nombre d'octets ou de caractères
(en fonction du mode d'encodage sélectionné, voir ci-dessus) lu jusqu'à présent.
Le site de $* et $# les variables avons était enlevé
$*, qui était obsolète au profit des modificateurs d'expression rationnelle "/s" et "/m", a été supprimé.
La variable obsolète $# (format de sortie pour les nombres) a été supprimée.
Deux nouveaux avertissements sévères, "$#/$* n'est plus pris en charge", ont été ajoutés.
substr () lvaleurs sommes-nous aucune plus long longueur fixe
Les valeurs renvoyées par la forme à trois arguments de substr () était autrefois une "longueur fixe
window" sur la chaîne d'origine. Dans certains cas, cela pourrait provoquer une action surprenante au niveau
distance ou autre comportement indéfini. La longueur de la fenêtre s'adapte désormais à la
longueur de la chaîne qui lui est assignée.
Analyse of "-F _"
L'identifiant "_" est désormais obligatoirement un mot nu après un opérateur filetest. Cela résout un
nombre de problèmes d'analyse erronée lorsqu'un sous-programme global "_" est défini.
":unique"
L'attribut ":unique" est devenu inutile, puisque son implémentation actuelle a été
fondamentalement défectueux et non threadsafe.
Effect of pragmas in eval
La valeur au moment de la compilation de la variable d'indication "%^H" peut désormais se propager dans eval("")uated
code. Cela rend plus utile l’implémentation de pragmas lexicaux.
En conséquence, la surcharge des constantes se propage désormais dans eval("").
chdir FOO
Un argument simple pour chdir() est désormais reconnu comme un descripteur de fichier. Versions antérieures
interprété le mot nu comme un nom de répertoire. (Gisle Aas)
Maniabilité of .pmc fichiers
Une ancienne fonctionnalité de Perl était qu'avant de "require" ou "use", recherchez un fichier avec un .pm
extension, ils chercheront d’abord un nom de fichier similaire avec un .pmc extension. Si ce fichier
est trouvé, il sera chargé à la place de tout fichier potentiellement existant se terminant par un .pm
extension.
Auparavant, .pmc les fichiers n'ont été chargés que s'ils étaient plus récents que le fichier correspondant .pm fichier.
À partir de la version 5.9.4, ils seront toujours chargés s'ils existent.
$^V is maintenant a "version" objet plutôt ; of a chaîne v
$^V peut toujours être utilisé avec le format %vd dans printf, mais toutes les opérations au niveau des caractères
va maintenant accéder à la représentation sous forme de chaîne de l'objet "version" et non aux ordinaux de
une chaîne en V. Les expressions comme "substr($^V, 0, 2)" ou "split //, $^V" ne fonctionnent plus et
doit être réécrit.
@- et @+ in motifs
Les tableaux spéciaux "@-" et "@+" ne sont plus interpolés dans les expressions régulières.
(Sadahiro Tomoyuki)
$CHARGEMENT AUTOMATIQUE Vous pouvez maintenant be entaché
Si vous appelez un sous-programme par un nom corrompu et s'il s'en remet à une fonction AUTOLOAD, alors
$AUTOLOAD sera (correctement) entaché. (Rick Delaney)
Entacher et printf
Lorsque Perl est exécuté en mode Taint, "printf()" et "sprintf()" rejetteront désormais tout message corrompu.
argument de format. (Rafael Garcia-Suarez)
indéfini et signal Manipulateurs
Annuler la définition ou supprimer un gestionnaire de signal via "undef $SIG{FOO}" équivaut désormais à définir
sur « PAR DÉFAUT ». (Rafael Garcia-Suarez)
restrictions et déréférencement in défini()
"utiliser des 'refs' stricts" ignorait la prise d'une référence concrète dans un argument pour défini(), comme
dans:
utiliser des « refs » stricts ;
mon $x = 'foo' ;
si (défini $$x) {...}
Cela produit désormais correctement l'erreur d'exécution "Impossible d'utiliser la chaîne comme référence SCALAIRE pendant que
"références strictes" utilisées ".
"défini @$foo" et "défini %$bar" sont désormais également soumis à des "refs" strictes (c'est-à-dire $foo
et $bar doivent y être des références appropriées.) ("défini (@foo)" et "défini (%bar)" sont
constructions déconseillées de toute façon.) (Nicholas Clark)
"(?p{})" a était enlevé
La construction d'expression régulière "(?p{})", qui était obsolète en Perl 5.8, a été
supprimé. Utilisez plutôt "(??{})". (Rafael Garcia-Suarez)
Pseudo-hachages avons était enlevé
La prise en charge des pseudo-hachages a été supprimée de Perl 5.9. (Le pragma "champs" reste
ici, mais utilise une implémentation alternative.)
Supprimer of le bytecode compilateur et of perlcc
"perlcc", le chargeur d'octets et les modules de support (B::C, B::CC, B::Bytecode, etc.) sont
n'est plus distribué avec les sources Perl. Ces outils expérimentaux n'ont jamais fonctionné
de manière fiable et, en raison du manque de bénévoles pour les maintenir en conformité avec Perl
développements d'interprètes, il a été décidé de les supprimer au lieu d'expédier un produit cassé
version de ceux-ci. La dernière version de ces modules peut être trouvée avec Perl 5.9.4.
Cependant, le framework du compilateur B reste pris en charge dans le noyau Perl, comme pour le plus utile
modules qu'il a autorisés (entre autres, B::Deparse et B::Concise).
Supprimer of le JPL
Le JPL (Java-Perl Lingo) a été supprimé de l'archive tar des sources Perl.
Récursif héritage détecté plus tôt
Perl lèvera désormais immédiatement une exception si vous modifiez le @ISA d'un paquet de cette manière.
manière que cela provoquerait un héritage récursif.
Auparavant, l'exception ne se produisait que lorsque Perl tentait d'utiliser l'option
héritage récursif lors de la résolution d'une méthode ou d'une recherche "$foo->isa($bar)".
avertissements : activé et avertissements ::warnif a changé à favoriser des opportunités of modules
Le comportement de la version 5.10.x favorise la personne utilisant le module ; Le comportement dans 5.8.x favorise
le rédacteur du module ;
Supposons le code suivant :
appels principaux Foo::Bar::baz()
Foo :: Bar hérite de Foo :: Base
Foo::Bar::baz() appelle Foo::Base::_bazbaz()
Foo::Base::_bazbaz() appelle : avertissements::warnif('substr', 'un avertissement
message');
Sur 5.8.x, le code avertit lorsque Foo::Bar contient « utiliser des avertissements ; » Ce n'est pas grave si
Foo::Base ou main ont des avertissements activés pour désactiver l'avertissement qu'il faut modifier Foo::Bar.
Sur 5.10.0 et versions ultérieures, le code avertit lorsque main contient des « avertissements d'utilisation » ; Ce n'est pas important
si Foo::Base ou Foo::Bar ont des avertissements activés pour désactiver l'avertissement qu'il faut modifier
principale.
Modules et Pragmatique
Mise à niveau individuels core modules
Encore plus de modules de base sont désormais également disponibles séparément via le CPAN. Si vous souhaitez
mettez à jour l'un de ces modules, vous n'avez pas besoin d'attendre une nouvelle version de Perl. De l'Intérieur
le shell cpan, exécutant la commande « r » fera rapport sur les modules avec des mises à niveau disponibles.
Voir "perldoc CPAN" pour plus d'informations.
Pragmatique Modifications
"caractéristique"
La nouvelle « fonctionnalité » pragma est utilisée pour activer de nouvelles fonctionnalités susceptibles de casser l’ancien code. Voir
"Le pragma "fonctionnalité"" ci-dessus.
"mr"
Ce nouveau pragma permet de changer l'algorithme utilisé pour résoudre les méthodes héritées. Voir
"Nouveau Pragma, "mro"" ci-dessus.
Portée du pragma « tri »
Le pragma « tri » a désormais une portée lexicale. Son effet était autrefois global.
Portée de "bignum", "bigint", "bigrat"
Les trois pragmas numériques "bignum", "bigint" et "bigrat" ont désormais une portée lexicale.
(Tél.)
"base"
Le pragma "base" avertit désormais si une classe tente d'hériter d'elle-même. (Curtis "Ovide"
Poé)
"strict" et "warnings"
"strict" et "warnings" se plaindront désormais bruyamment s'ils sont chargés via un message incorrect.
boîtier (comme dans "use Strict;"). (Johan Vromans)
"version"
Le module "version" prend en charge les objets de version.
"mises en garde"
Le pragma "warnings" ne charge plus "Carp". Cela signifie que le code utilisé
Les routines "Carp" sans l'avoir chargée au moment de la compilation pourraient devoir être ajustées ;
généralement, le code (défectueux) suivant ne fonctionnera plus et nécessitera
parenthèses à ajouter après le nom de la fonction :
utiliser des avertissements ;
nécessiter la carpe ;
Carpe::avoue 'argh';
"moins"
"moins" fait maintenant quelque chose d'utile (ou du moins il essaie de le faire). En fait, cela a été
transformé en pragma lexical. Ainsi, dans vos modules, vous pouvez désormais tester si vos utilisateurs
J'ai demandé à utiliser moins de CPU, ou moins de mémoire, moins de magie ou peut-être même moins de graisse.
Voir moins pour en savoir plus. (Josué ben Joré)
New modules
· "encoding::warnings", par Audrey Tang, est un module pour émettre des avertissements à chaque fois qu'un message ASCII
La chaîne de caractères contenant des octets de poids fort est implicitement convertie en UTF-8. C'est un
pragma lexical depuis Perl 5.9.4 ; sur les Perls plus anciens, son effet est global.
· "Module::CoreList", par Richard Clamp, est un petit module pratique qui vous indique ce que
Les versions des modules de base sont livrées avec toutes les versions de Perl 5. Il est livré avec une commande-
interface de ligne, "corelist".
· "Math::BigInt::FastCalc" est une version compatible XS, et donc plus rapide, de
"Math :: BigInt :: Calc".
· "Compress::Zlib" est une interface vers la bibliothèque de compression zlib. Il est livré avec un
version fournie de zlib, donc avoir un zlib fonctionnel n'est pas une condition préalable pour l'installer.
Il est utilisé par "Archive::Tar" (voir ci-dessous).
· "IO::Zlib" est une interface de style "IO::" pour "Compress::Zlib".
· "Archive::Tar" est un module pour manipuler les archives "tar".
· "Digest::SHA" est un module utilisé pour calculer de nombreux types de résumés SHA, a été
inclus pour la prise en charge de SHA dans le module CPAN.
· "ExtUtils::CBuilder" et "ExtUtils::ParseXS" ont été ajoutés.
· "Hash::Util::FieldHash", par Anno Siegel, a été ajouté. Ce module fournit un support
pour champ hashes: hachages qui maintiennent une association d'une référence avec une valeur, dans
une méthode de collecte des ordures thread-safe. De tels hachages sont utiles à implémenter à l’envers
objets.
· "Module::Build", par Ken Williams, a été ajouté. C'est une alternative à
"ExtUtils::MakeMaker" pour créer et installer des modules Perl.
· "Module::Load", de Jos Boumans, a été ajouté. Il fournit une interface unique pour charger
modules Perl et .pl fichiers.
· "Module::Loaded", de Jos Boumans, a été ajouté. Il est utilisé pour marquer les modules comme chargés
ou déchargé.
· "Package::Constants", par Jos Boumans, a été ajouté. C'est une simple aide pour tout lister
constantes déclarées dans un package donné.
· "Win32API::File", par Tye McQueen, a été ajouté (pour les builds Windows). Ce module
fournit un accès de bas niveau aux appels de l'API système Win32 pour les fichiers/répertoires.
· "Locale::Maketext::Simple", nécessaire à CPANPLUS, est un simple wrapper autour
"Locale :: Maketext :: Lexicon". Notez que "Locale::Maketext::Lexicon" n'est pas inclus dans
le noyau Perl ; le comportement de "Locale::Maketext::Simple" se dégrade gracieusement lorsque
ce dernier n'est pas présent.
· "Params::Check" implémente un mécanisme générique d'analyse/vérification des entrées. Il est utilisé par
CPANPLUS.
· "Term::UI" simplifie la tâche consistant à poser des questions à l'invite d'un terminal.
· "Object::Accessor" fournit une interface pour créer des accesseurs par objet.
· "Module::Pluggable" est un cadre simple pour créer des modules qui acceptent des sous-ensembles enfichables
modules.
· "Module::Load::Conditional" fournit des moyens simples d'interroger et éventuellement de charger les fichiers installés
modules.
· "Time::Pièce" fournit une interface orientée objet pour les fonctions temporelles, remplaçant le
intégrés heure locale() et gmtime().
· "IPC::Cmd" permet de rechercher et d'exécuter des commandes externes, éventuellement de manière interactive.
· "File::Fetch" fournit un mécanisme générique simple de récupération de fichiers.
· "Log::Message" et "Log::Message::Simple" sont utilisés par la fonction de journalisation de "CPANPLUS".
· "Archive::Extract" est un mécanisme générique d'extraction d'archives pour .le goudron (plaine, gzippé
ou bzippé) ou .zip fichiers.
· "CPANPLUS" fournit une API et un outil de ligne de commande pour accéder aux miroirs CPAN.
· "Pod::Escapes" fournit des utilitaires utiles pour décoder les séquences Pod E<...>.
· "Pod::Simple" est désormais le backend de plusieurs modules liés au Pod inclus avec
Perle.
Sélectionné Modifications à Core Modules
"Attribut::Gestionnaires"
"Attribute::Handlers" peut désormais signaler le fichier et le numéro de ligne de l'appelant. (David
Feldman)
Tous les attributs interprétés sont désormais transmis sous forme de références de tableau. (Damian Conway)
"B::Lint"
"B::Lint" est désormais basé sur "Module::Pluggable", et peut donc être étendu avec des plugins.
(Josué ben Joré)
"B" Il est désormais possible d'accéder aux indices de pragma lexical ("%^H") en utilisant la méthode
B::COP::hints_hash(). Il renvoie un objet "B::RHE", qui à son tour peut être utilisé pour obtenir un
référence de hachage via la méthode B::RHE::HASH(). (Josué ben Joré)
"Fil de discussion"
Comme l'ancien modèle de thread 5005thread a été supprimé, au profit des ithreads
schéma, le module "Thread" est désormais un wrapper de compatibilité, à utiliser dans l'ancien code
seulement. Il a été supprimé de la liste par défaut des extensions dynamiques.
Services Publics Modifications
perl -d
Le débogueur Perl peut désormais enregistrer toutes les commandes du débogueur pour les rechercher ultérieurement ; notamment, il
peut désormais imiter un retour en arrière, en redémarrant et en réexécutant toutes les mesures à la dernière barre.
commande à partir d’un historique de commandes enregistré.
Il peut également afficher l'arbre d'héritage parent d'une classe donnée, avec le "i"
commander.
Ptar
"ptar" est une implémentation Perl pure de "tar" fournie avec "Archive::Tar".
ptardif
"ptardiff" est un petit utilitaire utilisé pour générer une différence entre le contenu d'un fichier tar
archive et une arborescence de répertoires. Comme "ptar", il est livré avec "Archive::Tar".
shasum
"shasum" est un utilitaire de ligne de commande, utilisé pour imprimer ou vérifier les résumés SHA. Ça arrive
avec le nouveau module "Digest::SHA".
liste de cœurs
L'utilitaire "corelist" est désormais installé avec perl (voir "Nouveaux modules" ci-dessus).
h2ph et h2xs
"h2ph" et "h2xs" ont été rendus plus robustes par rapport au code C "moderne".
"h2xs" implémente une nouvelle option "--use-xsloader" pour forcer l'utilisation de "XSLoader" même dans
modules rétrocompatibles.
Le traitement des noms d'auteurs comportant des apostrophes a été corrigé.
Toutes les énumérations avec des valeurs négatives sont maintenant ignorées.
perlivp
"perlivp" ne vérifie plus *.ph fichiers par défaut. Utilisez la nouvelle option "-a" pour exécuter
tous Des tests.
trouver2perl
"find2perl" suppose maintenant "-print" comme action par défaut. Auparavant, il fallait
spécifié explicitement.
Plusieurs bugs ont été corrigés dans "find2perl", concernant "-exec" et "-eval". Également
les options "-path", "-ipath" et "-iname" ont été ajoutées.
données_config
"config_data" est un nouvel utilitaire fourni avec "Module::Build". Il fournit une commande-
interface en ligne pour la configuration des modules Perl qui utilisent le framework Module::Build
de configurabilité (c'est-à-dire les modules *::ConfigData qui contiennent la configuration locale
informations pour leurs modules parents.)
cpanp
"cpanp", le shell CPANPLUS, a été ajouté. ("cpanp-run-perl", une aide pour CPANPLUS
opération, a également été ajouté, mais n'est pas destiné à une utilisation directe).
cpan2dist
"cpan2dist" est un nouvel utilitaire fourni avec CPANPLUS. C'est un outil pour créer
distributions (ou packages) à partir des modules CPAN.
pod2html
La sortie de "pod2html" a été améliorée pour être plus personnalisable via CSS. Quelques
les problèmes de formatage ont également été corrigés. (Jari Aalto)
New Documentation
La page de manuel perlpragma explique comment écrire ses propres pragmas lexicaux en Perl pur.
(quelque chose qui est possible à partir de 5.9.4).
La nouvelle page de manuel perlglossary est un glossaire des termes utilisés dans la documentation Perl,
techniques et autres, aimablement fournis par O'Reilly Media, Inc.
La page de manuel perlreguts, gracieuseté d'Yves Orton, décrit les composants internes du langage Perl régulier.
moteur d'expression.
La page de manuel perlreapi décrit l'interface de l'interpréteur Perl utilisé pour écrire
moteurs d'expressions régulières enfichables (par AEvar Arnfjoer` Bjarmason).
La page de manuel perlunitut est un tutoriel pour la programmation avec les encodages Unicode et chaîne dans
Perl, gracieuseté de Juerd Waalboer.
Une nouvelle page de manuel, perlunifaq (la FAQ Perl Unicode), a été ajoutée (Juerd Waalboer).
La page de manuel perlcommunity donne une description de la communauté Perl sur Internet et dans
vrai vie. (Edgar "Trizor" Béring)
La page de manuel CORE documente l'espace de noms « CORE :: ». (Tél.)
La fonctionnalité existante de longue date des expressions rationnelles "/(?{...})/" définissant $_ et pos () est maintenant documenté.
Performances Améliorations
En place tri
Le tri des tableaux en place ("@a = sort @a") est désormais optimisé pour éviter de faire une copie temporaire
du tableau.
De même, le "tri inversé..." est désormais optimisé pour trier à l'envers, évitant ainsi la génération
d'une liste intermédiaire temporaire.
Lexical tableau accès
L'accès aux éléments des tableaux lexicaux via une constante numérique comprise entre 0 et 255 est désormais
plus rapide. (Cela n'était auparavant le cas que pour les tableaux globaux.)
XS-assisté SWASHGET
Du code Perl pur que Perl utilisait pour récupérer les propriétés Unicode et la translittération
les mappages ont été réimplémentés dans XS.
Constante sous-programmes
Les composants internes de l'interpréteur prennent désormais en charge une forme beaucoup plus efficace de la mémoire d'inlineable
constantes. Stocker une référence à une valeur constante dans une table de symboles équivaut à un
typeglob complet référençant un sous-programme constant, mais utilisant environ 400 octets de moins de mémoire.
Ce sous-programme constant proxy est automatiquement mis à niveau vers un véritable typeglob avec
sous-programme si nécessaire. L'approche adoptée est analogue à l'espace existant
optimisation pour les déclarations de stub de sous-programme, qui sont stockées sous forme de scalaires simples en place
du typeglob complet.
Plusieurs modules de base ont été convertis pour utiliser cette fonctionnalité pour leur système
constantes dépendantes - par conséquent "utilisez POSIX ;" prend désormais environ 200 Ko de mémoire en moins.
"PERL_DONT_CREATE_GVSV"
Le nouveau flag de compilation "PERL_DONT_CREATE_GVSV", introduit en option dans perl 5.8.8,
est activé par défaut dans Perl 5.9.3. Cela empêche Perl de créer un scalaire vide avec
chaque nouveau typeglob. Voir perl589delta pour plus de détails.
Faible sommes-nous moins chère
La création de références faibles est maintenant O(1) plutôt que O (n), avec l'aimable autorisation de Nicholas Clark. Faible
la suppression de référence reste O (n), mais si la suppression n'a lieu qu'à la sortie du programme, cela peut être
complètement ignoré.
sorte() améliorations
Salvador Fandin~o a apporté des améliorations pour réduire l'utilisation de la mémoire du "tri" et accélérer
certains cas.
Mémoire optimisations
Plusieurs structures de données internes (typeglobs, GV, CV, formats) ont été restructurées pour
utiliser moins de mémoire. (Nicolas Clark)
UTF-8 cachette optimisation
Le code de mise en cache UTF-8 est désormais plus efficace et utilisé plus souvent. (Nicolas Clark)
Négligé état on Windows
Sous Windows, Perl stat () la fonction ouvre normalement le fichier pour déterminer le nombre de liens et
mettre à jour les attributs qui peuvent avoir été modifiés via des liens physiques. Paramètre
${^WIN32_SLOPPY_STAT} à une vraie valeur accélère stat () en n'effectuant pas cette opération.
(Jan Dubois)
Régulier expressions optimisations
Moteur dé-récursivé
Le moteur d'expression régulière n'est plus récursif, ce qui signifie que les modèles utilisés
pour déborder, la pile mourra avec des explications utiles, ou s'exécutera jusqu'à son terme,
ce qui, puisqu'ils ont déjà réussi à faire exploser la pile, prendra probablement beaucoup de temps
il est temps que cela se produise. Si vous rencontrez un débordement de pile occasionnel (ou un défaut de segmentation)
et effectuez une mise à niveau pour découvrir que maintenant Perl se bloque apparemment à la place, recherchez un fichier dégénéré
expression régulière. (Dave Mitchell)
Classes de caractères à caractère unique traitées comme des littéraux
Les classes d'un seul personnage sont désormais traitées de la même manière que si le personnage avait été
utilisé comme un littéral, ce qui signifie que le code qui utilise les classes char comme mécanisme d'échappement
verra une accélération. (Yves Orton)
Trie optimisation des alternances de chaînes littérales
Les alternatives, lorsque cela est possible, sont optimisées pour créer des structures de correspondance plus efficaces.
Les alternances littérales de chaînes sont fusionnées dans un trie et correspondent simultanément.
Cela signifie qu'au lieu d'un temps O(N) pour faire correspondre N alternances en un point donné, le
le nouveau code fonctionne dans O(Une fois. Une nouvelle variable spéciale, ${^RE_TRIE_MAXBUF}, a été
ajouté pour affiner cette optimisation. (Yves Orton)
Remarque: Il existe de nombreux codes qui contournent les mauvaises performances historiques de Perl sur
alternances. Souvent, les astuces utilisées pour cela désactiveront les nouvelles optimisations.
Espérons que les modules utilitaires utilisés à cet effet seront informés de ces nouveaux
optimisations.
Optimisation du point de départ Aho-Corasick
Lorsqu'un motif commence par une alternance essayable et qu'il n'y a pas de mieux
optimisations disponibles, le moteur d'expression régulière utilisera la correspondance Aho-Corasick pour trouver le
point de départ. (Yves Orton)
en un clic et Configuration Améliorations
Configuration améliorations
"-Dusesitecustomize"
La personnalisation d'exécution de @INC peut être activée en passant l'indicateur "-Dusesitecustomize"
configurer. Lorsqu'il est activé, cela fera fonctionner Perl $sitelibexp/sitecustomize.pl
avant toute chose. Ce script peut ensuite être configuré pour ajouter des entrées supplémentaires à
@INC.
Installations délocalisables
Il existe désormais un support pour Configure pour la création d'une arborescence Perl déplaçable. Si vous configurez
avec "-Duserelocableinc", puis les chemins dans @INC (et tout le reste dans %Config)
peut éventuellement être localisé via le chemin de l'exécutable Perl.
Cela signifie que si la chaîne ".../" est trouvée au début d'un chemin, elle est
remplacé par le répertoire de $^X. Ainsi, la relocalisation peut être configurée selon vos besoins.
base de répertoires, bien que la valeur par défaut avec "-Duserelocableinc" soit que tout soit
déménagé. L'installation initiale est effectuée sur le préfixe configuré d'origine.
strlcat() et strlcpy()
Le processus de configuration détecte désormais si strlcat() et strlcpy() sont offertes.
Lorsqu'ils ne sont pas disponibles, la propre version de Perl est utilisée (du site public de Russ Allbery).
mise en œuvre du domaine). Divers endroits de l'interpréteur Perl les utilisent désormais. (Steve
Peters)
"d_pseudofork" et "d_printf_format_null"
Une nouvelle variable de configuration, disponible en tant que $Config{d_pseudofork} dans le module Config,
a été ajouté, pour distinguer les vrais fourchette() support du faux pseudofork utilisé sur
Plateformes Windows.
Une nouvelle variable de configuration, "d_printf_format_null", a été ajoutée, pour voir si
Les formats de type printf peuvent être NULL.
Configurer l'aide
"Configure -h" a été étendu avec les options les plus couramment utilisées.
Compilation améliorations
Construction parallèle
Les marques parallèles devraient fonctionner correctement maintenant, bien qu'il puisse toujours y avoir des problèmes si "make
test" est chargé de s'exécuter en parallèle.
Prise en charge des compilateurs Borland
Construire avec les compilateurs de Borland sur Win32 devrait fonctionner plus facilement. En particulier
Steve Hay a travaillé pour contourner de nombreux avertissements émis par leurs compilateurs et à
au moins une erreur interne du compilateur C.
Construction statique sous Windows
Les extensions Perl sous Windows peuvent désormais être intégrées de manière statique dans la DLL Perl.
De plus, il est désormais possible de construire un "perl-static.exe" qui ne dépend pas du langage Perl.
DLL sur Win32. Voir les makefiles Win32 pour plus de détails. (Vadim Konovalov)
Fichiers ppport.h
Tous pport.h les fichiers des modules XS fournis avec Perl sont désormais générés automatiquement lors de la construction
temps. (Marcus Holland-Moritz)
Compatibilité C++
Des efforts ont été faits pour rendre Perl et les modules de base XS compilables avec divers
Compilateurs C++ (bien que la situation ne soit pas parfaite avec certains compilateurs sur
certaines des plateformes testées.)
Prise en charge du compilateur Microsoft 64 bits
La prise en charge de la création de Perl avec le compilateur 64 bits de Microsoft a été améliorée.
(État actif)
Visual C + +
Perl peut désormais être compilé avec Microsoft Visual C++ 2005 (et 2008 Beta 2).
Versions Win32
Toutes les versions win32 (MS-Win, WinCE) ont été fusionnées et nettoyées.
en un clic améliorations
Fichiers auxiliaires du module
Les fichiers README et les journaux de modifications pour les modules CPAN fournis avec Perl ne sont plus
installé.
New Or Agencement des Plateformes
Il a été rapporté que Perl fonctionnait sur Symbian OS. Voir perlsymbian pour plus d'informations.
De nombreuses améliorations ont été apportées pour que Perl fonctionne correctement sur z/OS.
Perl fonctionnerait sur DragonFlyBSD et MidnightBSD.
Perl fonctionnerait également sur NexentaOS ( http://www.gnusolaris.org/ ).
Le port VMS a été amélioré. Voir perlvms.
La prise en charge de Cray XT4 Catamount/Qk a été ajoutée. Voir astuces/catamount.sh dans la source
distribution du code pour plus d’informations.
Les correctifs des fournisseurs ont été fusionnés pour RedHat et Gentoo.
DynaLoader ::dl_unload_file() fonctionne désormais sous Windows.
Sélectionné Punaise Correctifs
restrictions dans les blocs d'évaluation d'expression rationnelle
"strict" n'était pas en vigueur dans les blocs d'évaluation des expressions rationnelles ("/(?{...})/").
appel CORE :: require ()
CORE :: require () et CORE::do() ont toujours été analysés comme require () et faire() quand ils étaient
outrepassé. C'est maintenant corrigé.
Indices des tranches
Vous pouvez désormais utiliser une forme sans flèche pour les indices chaînés après une tranche de liste, comme dans :
({foo => "bar"})[0]{foo}
C'était une erreur de syntaxe ; un "->" était requis.
"aucun avertissement 'catégorie'" fonctionne correctement avec -w
Auparavant, lors de l'exécution avec les avertissements activés globalement via "-w", désactivation sélective
L'utilisation de catégories d'avertissement spécifiques désactiverait en fait tous les avertissements. C'est maintenant
fixé; maintenant "pas d'avertissement 'io';" ne désactivera que les avertissements dans la classe "io".
Auparavant, tous les avertissements étaient désactivés par erreur.
améliorations des fils de discussion
Plusieurs fuites de mémoire dans les threads ont été fermées. De plus, les threads ont perdu moins de mémoire.
intensif.
"threads" est désormais un module à double vie, également disponible sur CPAN. Il a été élargi en
plusieurs façons. UN tuer() La méthode est disponible pour la signalisation des threads. On peut avoir du fil
statut, ou la liste des threads en cours d’exécution ou pouvant être rejoints.
Une nouvelle méthode "threads->exit()" est utilisée pour quitter l'application (c'est le
par défaut pour le thread principal) ou à partir du thread actuel uniquement (c'est la valeur par défaut pour
tous les autres sujets). D'un autre côté, le sortie() intégré provoque désormais toujours le tout
demande de résiliation. (Jerry D. Hedden)
chr() et valeurs négatives
chr() sur une valeur négative donne désormais "\x{FFFD}", le caractère de remplacement Unicode,
sauf lorsque le pragma "octets" est en vigueur, où les huit bits de poids faible de la valeur sont
utilisé.
PERL5SHELL et altération
Sous Windows, la variable d'environnement PERL5SHELL est désormais vérifiée pour sa contamination.
(Rafael Garcia-Suarez)
Utilisation de *FILE{IO}
Les tests de fichier "stat()" et "-X" traitent désormais les descripteurs de fichiers *FILE{IO} comme les descripteurs de fichiers *FILE.
(Steve Peters)
Surcharge et rebénédiction
La surcharge fonctionne désormais lorsque les références sont rebénies dans une autre classe. Intérieurement,
ceci a été implémenté en déplaçant l'indicateur de "surcharge" de la référence vers
le référent, qui est logiquement là où il aurait toujours dû être. (Nicolas Clark)
Surcharge et UTF-8
Quelques bugs liés à la gestion de l'UTF-8 avec des objets dont la stringification est surchargée
ont été corrigés. (Nicolas Clark)
fuites de mémoire d'évaluation corrigées
Traditionnellement, « eval 'syntax error' » a été divulgué de manière importante. Beaucoup (mais pas tous) d'entre eux
les fuites ont désormais été éliminées ou réduites. (Dave Mitchell)
Appareil aléatoire sous Windows
Dans les versions précédentes, Perl lisait le fichier / Dev / urandom s'il existait au moment du semis
son générateur de nombres aléatoires. Il est peu probable que ce fichier existe sous Windows, et si c'était le cas
ne contiendrait probablement pas les données appropriées, donc Perl n'essaye plus de les lire sur
Les fenêtres. (Alex Davies)
PERLIO_DEBUG
La variable d'environnement "PERLIO_DEBUG" n'a plus d'effet pour les scripts setuid
et pour les scripts exécutés avec -T.
De plus, avec un Perl compatible avec les threads, l'utilisation de "PERLIO_DEBUG" pourrait conduire à un problème interne.
débordement de tampon. Cela a été corrigé.
PerlIO :: scalaires et scalaires en lecture seule
PerlIO::scalar empêchera désormais l'écriture dans des scalaires en lecture seule. De plus, chercher() est maintenant
pris en charge avec les descripteurs de fichiers basés sur PerlIO::scalar, la chaîne sous-jacente étant zéro-
rempli selon les besoins. (Rafael, Jarkko Hietaniemi)
étude() et UTF-8
étude() n'a jamais fonctionné pour les chaînes UTF-8, mais pourrait conduire à de faux résultats. C'est maintenant un
aucune opération sur les données UTF-8. (Yves Orton)
Signaux critiques
Les signaux SIGILL, SIGBUS et SIGSEGV sont désormais toujours délivrés de manière "dangereuse"
(contrairement aux autres signaux, qui sont différés jusqu'à ce que l'interpréteur Perl atteigne un
état raisonnablement stable ; voir "Signaux différés (signaux sûrs)" dans perlipc). (Rafaël)
@ Correction du crochet INC
Lorsqu'un module ou un fichier est chargé via un hook @INC, et lorsque ce hook a défini un
entrée de nom de fichier dans %INC, __FILE__ est maintenant défini pour ce module conformément à la
contenu de cette entrée %INC. (Rafaël)
Correction du commutateur "-t"
Les commutateurs "-w" et "-t" peuvent désormais être utilisés ensemble sans gâcher lesquels
des catégories d'avertissements sont activées. (Rafaël)
Duper les descripteurs de fichiers UTF-8
La duplication d'un descripteur de fichier comportant l'ensemble de couches PerlIO ":utf8" portera désormais correctement
cette couche sur le descripteur de fichier dupé. (Rafaël)
Localisation des éléments de hachage
La localisation d'un élément de hachage dont la clé était donnée en variable ne fonctionnait pas correctement si
la variable a été modifiée alors que le locale() était en vigueur (comme dans "local $h{$x}; ++$x").
(Bo Lindbergh)
New or Changé Diagnostics
Utilisation d'une valeur non initialisée
Perl va maintenant essayer de vous indiquer le nom de la variable (le cas échéant) qui n'était pas définie.
Utilisation obsolète de ma() au faux conditionnel
Un nouvel avertissement de dépréciation, Obsolète utilisé of ma() in non conditionnels., A été
ajouté, pour mettre en garde contre l'utilisation de la construction douteuse et obsolète
mon $x si 0 ;
Voir perldiag. Utilisez plutôt des variables « état ».
!=~ devrait être !~
Un nouvel avertissement, "!=~ Should be !~", est émis pour éviter cette faute d'orthographe du non-
opérateur correspondant.
Nouvelle ligne dans une chaîne justifiée à gauche
L'avertissement Nouvelle ligne in justifié à gauche un magnifique a été retiré.
Trop tard pour l'option "-T"
L'erreur Aussi tard pour "-T" option a été reformulé pour être plus descriptif.
La variable "%s" %s masque une déclaration antérieure
Cet avertissement est désormais émis dans des cas plus cohérents ; bref, quand l'un des
Les déclarations impliquées sont une variable "ma":
mon $x ; mon $x ; # prévient
mon $x ; nos $x ; # prévient
nos $x ; mon $x ; # prévient
D'autre part, les éléments suivants :
nos $x ; nos $x ;
donne maintenant un avertissement ""notre" variable %s redéclarée".
readdir ()/fermé ()/etc. tentative sur un dirhandle invalide
Ces nouveaux avertissements sont désormais émis lorsqu'un dirhandle est utilisé mais qu'il est soit fermé, soit
pas vraiment un problème.
Ouverture du dirhandle/filehandle %s également en tant que fichier/répertoire
Deux avertissements de dépréciation ont été ajoutés : (Rafael)
Ouverture du dirhandle %s également sous forme de fichier
Ouverture du descripteur de fichier %s également en tant que répertoire
L'utilisation de -P est obsolète
Le commutateur de ligne de commande "-P" de Perl est désormais obsolète.
La chaîne v utilisée/require n'est pas portable
Perl vous mettra en garde contre d'éventuels problèmes de rétrocompatibilité avec l'option "utiliser
VERSION".
perle -V
"perl -V" a plusieurs améliorations, le rendant plus utilisable à partir de scripts shell pour obtenir
la valeur des variables de configuration. Voir perlrun pour plus de détails.
Changé Internals
En général, le code source de Perl a été refactorisé, rangé et optimisé dans de nombreux domaines.
lieux. De plus, la gestion et l'allocation de la mémoire ont été améliorées sur plusieurs points.
Lors de la compilation du noyau Perl avec gcc, autant d'indicateurs d'avertissement gcc sont activés que c'est le cas.
possible sur la plateforme. (Cette quête de propreté ne s'étend pas au code XS car
nous ne pouvons pas garantir la propreté du code que nous n'avons pas écrit.) Des indicateurs de rigueur similaires ont
été ajouté ou renforcé pour divers autres compilateurs C.
Réorganisation of SVt_* des constantes
L'ordre relatif des constantes qui définissent les différents types de « SV » a changé ; dans
notamment, "SVt_PVGV" a été déplacé avant "SVt_PVLV", "SVt_PVAV", "SVt_PVHV" et
"SVt_PVCV". Il est peu probable que cela fasse une différence à moins que vous n'ayez du code qui explicitement
fait des hypothèses sur cet ordre. (La hiérarchie d'héritage des objets "B::*" a
a été modifié pour refléter cela.)
Élimination of SVt_PVBM
Dans le même ordre d'idées, le type interne "SVt_PVBM" a été supprimé. Ce type dédié de
"SV" était utilisé par l'opérateur "index" et par certaines parties du moteur d'expression rationnelle pour faciliter
Matchs Boyer-Moore. Son utilisation en interne a été remplacée par des "SV" de type "SVt_PVGV".
New type SVt_BIND
Un nouveau type "SVt_BIND" a été ajouté, en prévision du projet d'implémentation de Perl 6 sur
5. Il n’y a délibérément pas encore de mise en œuvre et ils ne peuvent pas encore être créés ou
détruit.
Supprimer of RPC symboles
Les symboles du préprocesseur C "PERL_PM_APIVERSION" et "PERL_XS_APIVERSION", qui ont été
censé donner le numéro de version du plus ancien binaire compatible Perl (resp. source-
compatibles) avec l’actuel, n’étaient pas utilisés et avaient parfois des valeurs trompeuses. Ils
ont été enlevés.
Moins espace is d'utiliser by ops
La structure "BASEOP" utilise désormais moins d'espace. Le champ "op_seq" a été supprimé et
remplacé par un champ de bits d'un seul bit "op_opt". "op_type" fait désormais 9 bits. (Par conséquent,
la classe "B::OP" ne fournit plus de méthode "seq".)
New analyseur
L'analyseur de Perl est maintenant généré par bison (il était auparavant généré par byacc.) En conséquence,
il semble être un peu plus robuste.
De plus, Dave Mitchell a amélioré la sortie de débogage du lexer sous "-DT".
Utilisez le of "const"
Andy Lester a fourni de nombreuses améliorations pour déterminer quels paramètres de fonction et
les variables pourraient en fait être déclarées "const" au compilateur C. Steve Peters a fourni de nouvelles
* _set macros et retravaillé le noyau pour les utiliser plutôt que de les affecter aux macros dans LVALUE
contexte
Mathoms
Un nouveau fichier, mathoms.c, a été ajouté. Il contient des fonctions qui ne sont plus utilisées dans
le noyau Perl, mais qui restent disponibles pour des raisons de compatibilité binaire ou source.
Cependant, ces fonctions ne seront pas compilées si vous ajoutez "-DNO_MATHOMS" dans le compilateur.
drapeaux.
"AvFLAGS" a était enlevé
La macro "AvFLAGS" a été supprimée.
"un V_*" change
Les fonctions "av_*()", utilisées pour manipuler des tableaux, n'acceptent plus les paramètres "AV*" nuls.
$^H et %^H
L'implémentation des variables spéciales $^H et %^H a changé, pour permettre l'implémentation
pragmes lexicaux en Perl pur.
B : modules héritage a changé
La hiérarchie d'héritage des modules "B::" a changé ; "B::NV" hérite désormais de "B::SV"
(il héritait de "B::IV").
Témoignages hachage et tableau constructeurs
Les constructeurs de hachage et de tableau anonymes prennent désormais 1 opération dans l'optree au lieu de 3, maintenant
que pp_anonhash et pp_anonlist renvoient une référence à un hachage/tableau lorsque l'opération est
marqué avec OPf_SPECIAL. (Nicolas Clark)
Connu Problèmes
Il reste encore un problème dans l'implémentation du lexical $_ : ça ne marche pas
à l'intérieur des blocs "/(?{...})/". (Voir le test TODO dans t/op/mydef.t.)
Les opérateurs filetest empilés ne fonctionneront pas lorsque le pragma « filetest » est en vigueur, car
ils s'appuient sur stat () le tampon "_" est rempli et le test de fichier est contourné stat ().
UTF-8 d'ouvrabilité
La gestion d'Unicode est encore impure à plusieurs endroits, où elle dépend de
si une chaîne est marquée en interne comme UTF-8. Cela sera rendu plus cohérent en Perl
5.12, mais cela ne sera pas possible sans une certaine incompatibilité ascendante.
Plateforme Autres ingrédients Problèmes
Lorsqu'il est compilé avec g++ et la prise en charge des threads sous Linux, il est signalé que le $! s'arrête
fonctionne correctement. Ceci est lié au fait que la glibc propose deux strerror_r(3)
implémentation, et Perl sélectionne la mauvaise.
Reporting Bugs
Si vous trouvez ce que vous pensez être un bogue, vous pouvez consulter les articles récemment publiés sur le
groupe de discussion comp.lang.perl.misc et la base de données de bogues perl sur http://rt.perl.org/rt3/ .
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 bug perl programme 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.
Utilisez perl5100delta en ligne à l'aide des services onworks.net
