Pour citer perlop:
Toutefois, si la variable a été utilisé dans un contexte de chaîne que depuis a été définie, et a une valeur qui n'est pas la chaîne vide et correspond au modèle /^[a-zA-Z]*[0-9]*\z/
, l'incrément est fait comme une chaîne, en préservant chaque caractère dans sa gamme , avec report.
Les plages sont 0-9, A-Z et a-z. Quand un nouveau personnage est nécessaire, il est pris dans la plage du premier caractère. Chaque gamme est indépendante. les caractères ne quittent jamais la plage dans laquelle ils ont démarré.
9z
ne correspond pas au motif, donc il reçoit un incrément numérique. (Il devrait probablement donner un avertissement "Argument n'est pas numérique", mais il ne le fait pas dans Perl 5.10.1.) Les chiffres sont autorisés seulement après toutes les lettres (le cas échéant), jamais avant eux.
Notez qu'une chaîne tous les chiffres ne correspond au modèle, et ne reçoivent un incrément de chaîne (si elle n'a jamais été utilisé dans un contexte numérique). Cependant, le résultat d'un incrément de chaîne sur une telle chaîne est identique à un incrément numérique, sauf qu'il a une précision infinie et que les zéros en tête (le cas échéant) sont conservés. (Vous ne pouvez donc faire la différence que lorsque le nombre de chiffres dépasse ce qu'une IV ou une NV peut stocker, ou qu'il y a des zéros en tête.
Je ne vois pas pourquoi vous pensez Zz
devrait devenir Aa
(sauf si vous pensez à l'arithmétique modulaire, mais ce n'est pas le cas). Il devient AAa
par ce processus:
- incrémenter
z
se enroule autour de a
. Incrémente le caractère précédent.
- L'incrémentation
Z
se déroule autour de A
. Il n'y a pas de caractère précédent, alors ajoutez le premier de cette plage, qui est un autre A
.
Le range operator (..
), lorsqu'il est administré deux chaînes (et un correspond au modèle à la main gauche), utilise l'incrément de chaîne pour produire une liste (ceci est expliqué à la fin de cet article). La liste commence par l'opérande gauche, qui est ensuite incrémentée jusqu'à ce que soit:
- La valeur est égale à l'opérande de droite, ou
- La longueur de la valeur est supérieure à la longueur de l'opérande de droite .
Il renvoie une liste de toutes les valeurs. (Si le cas 2 mis fin à la liste, la valeur finale ne figure pas dans ce.)
On dirait que dans le contexte auto-incrémenté, 9z, 9a, 9b ou 9zzz123, etc sont identiques. Les éléments non numérotés sont supprimés en silence. – Mike
Il s'agit de caractères incrémentiels.Ce n'est pas essayer de comprendre quel modèle vous voulez. J'en parle un peu dans la nouvelle édition du Learning Perl Student Workbook que j'ai presque fini. :) –
Y at-il un nom pour ce format de "numérotation" en utilisant des lettres, quelqu'un sait-il? – AmbroseChapel