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

|, &, ^ 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

Replies are listed 'Best First'.
Re^7: Incrementing a large number without Math::BigInt
by Cap'n Steve (Friar) on Apr 26, 2006 at 05:45 UTC
    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.

      ASCII has nothing to do with it. You can use those operators on any string of bytes, whether the data is ASCII, the result of inet_aton or a struct to pass to a system call. The operators work independantly of how the data is interpreted.

      Now, $letter ^ ' ' will not toggle the case of the letter in all encodings, but that's a (simple) algorithm that uses ^ and not ^ proper.

      Here's an example which demonstrates that ^ work no matter how the data was encoded:

      use Socket qw( inet_aton inet_ntoa ); my $ip = inet_aton('10.0.0.155'); my $mask = inet_aton('255.255.255.240'); my $broadcast = $ip | ~$mask; print(inet_ntoa($broadcast), "\n"); # 10.0.0.159

      It's definitely a language feature, and I believe an uncommon one. You can't do that in C or Java, for example.