in reply to Re^3: Incrementing a large number without Math::BigInt
in thread Incrementing a large number without Math::BigInt

Wow, that is impressive. Silly me, not even trying the obvious way because I thought Perl couldn't handle it. I've learned my lesson.

Just curious, what other numerical operations can Perl handle as a string that it can't handle as a number? Deincrementing doesn't seem to work.
  • Comment on Re^4: Incrementing a large number without Math::BigInt

Replies are listed 'Best First'.
Re^5: Incrementing a large number without Math::BigInt
by GrandFather (Saint) on Apr 26, 2006 at 03:51 UTC

    Only auto-increment (++) is magical in that fashion and only when the variable is a "string". From perlop:

    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*\z/, 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.

    DWIM is Perl's answer to Gödel

      |, &, ^ and ~ also work on strings.

      >perl -e "print 'A'|'B' C >perl -e "print 'C'&'E' A >perl -e "print 'A'^' ' a

      I wish << and >> did as well.

      Documented in perlop

        Yes, I actually noticed this node while searching for a solution to my problem. But isn't that more of an ASCII feature than a Perl one? I wonder why the deincrementing and bit shifting don't work.