Increment (++) and decrement (--) strings in Perl
perlop(1) explains that this is true, but doesn't give a rationale:
The auto-increment operator has a little extra builtin magic to it. [If applicable, and subject to certain constraints,] the increment is done as a string, preserving each character within its range, with carry[...]
The auto-decrement operator is not magical.
The reason you get -1 is because when interpreted as a number, "b" turns into 0 since it has no leading digits (Contrarily, "4b" turns into 4).
There are at least three reasons:
- because there isn't any great need for it
- the magic of auto-incrementing has been seen to be faulty, and there is no reason implement auto-decrementing in the same faulty way
- the magic of auto-incrementing cannot be fixed because p5p doesn't like to break backwards compatibility
Raku (née Perl 6) on the other hand does not suffer from a need for backwards compatibility, and therefore has better behavior for auto-incrementing strings and has auto-decrementing as well. The ++ and -- operators work by calling the succ
and pred
methods on the object they are operating on.