D'incrémentation (++) et de décrémentation (--) les chaînes de caractères en Perl
Avec perl -e '$string="a";print ++$string;'
nous obtenons b
,
mais avec perl -e '$string="b";print --$string;'
nous obtenons -1
.
Donc, si nous pouvons incrément pourquoi ne pouvons-nous pas de décrémentation?
ÉDITÉ
"L'auto-décrémentation de l'opérateur n'est pas magique" par perlop
Perl nous donner beaucoup d'équipements, pourquoi pas celle-ci? Ce n'est pas de la critique, mais ne serait pas prévu un comportement similaire pour les opérateurs de la même? Est-il une raison particulière?
- Je pense que votre intérieur des guillemets doivent être entre guillemets.
- yep, c'est dans les docs, incrément est magique, pas de décrémentation (voir l'homme perlop, recherche pour l'Auto-increment)
Vous devez vous connecter pour publier un commentaire.
perlop(1) explique que c'est vrai, mais ne donne pas une justification:
La raison pour laquelle vous obtenez -1 est parce que s'il est interprété comme un nombre, "b" se transforme en 0, car il n'a pas d'premiers chiffres (au Contraire, "4b" se transforme en 4).
Il y a au moins trois raisons:
Perl 6 sur l'autre main ne souffre pas d'une nécessité pour assurer la compatibilité ascendante, et a donc un meilleur comportement pour l'incrémentation automatique des chaînes et a l'auto-décrémentation ainsi. Voir la S03 spec.
Parce qu'il n'est pas intuitif, quelles valeurs doit précéder la "plus bas" de caractère dans la gamme. Il peut faire sens que
"A" + 1
devrait être"B"
, et que"B" + 1
devrait être"C"
. Et donc"B" - 1
devrait être"A"
. Mais que doit -"A" - 1
être?++
s'entraîner. Si vous neperl -e '$str="z"; print ++$str'
vous obtenezaa
, qui certainement ne pas suivrez
dans la table ASCII.