Abdulaziz Ghuloum writes:
 > 
 > So, is there a rational reason why the increment operator should behave this
 > way and why the decrement operator behaves differently?

Yes, increment is magic, but decrement is not. In the perlop man page
(perldoc perlop), you'll find

       Auto-increment and Auto-decrement

       "++" and "--" work as in C.  That is, if placed before a
       variable, they increment or decrement the variable before
       returning the value, and if placed after, increment or
       decrement the variable after returning the value.

       The auto-increment operator has a little extra builtin
       magic to it.  If you increment a variable that is numeric,
       or that has ever been used in a numeric context, you get a
       normal increment.  If, however, the variable has been used
       in only string contexts since it was set, and has a value
       that is not the empty string and matches the pattern
       `/^[a-zA-Z]*[0-9]*$/', the increment is done as a string,
       preserving each character within its range, with carry:

           print ++($foo = '99');      # prints '100'
           print ++($foo = 'a0');      # prints 'a1'
           print ++($foo = 'Az');      # prints 'Ba'
           print ++($foo = 'zz');      # prints 'aaa'

       The auto-decrement operator is not magical.

I hope this helps,

Tim

Reply via email to