in reply to behavior of bitwise shift

It looks like this shift operators automatically mod their operand by the size of an integer for you (and for me). However, that depends on the implementation. From perldoc perlop:
Note that both "<<" and ">>" in Perl are implemented directly using "<<" and ">>" in C. If "use integer" (see "Integer Arithmetic") is in force then signed C integers are used, else unsigned C integers are used. Either way, the implementation isn't going to generate results larger than the size of the integer type Perl was built with (32 bits or 64 bits).

The result of overflowing the range of the integers is undefined because it is undefined also in C. In other words, using 32-bit integers, "1 << 32" is undefined. Shifting by a negative number of bits is also undefined.


Caution: Contents may have been coded under pressure.