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:

  1. because there isn't any great need for it
  2. the magic of auto-incrementing has been seen to be faulty, and there is no reason implement auto-decrementing in the same faulty way
  3. 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.

Tags:

Perl