X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2Finteger.pm;h=86afcaf130db0218bc6b62ef0f30595813c05c0e;hb=2dc00d5bf719a9ed74e0637ca74ee27c3de3fb36;hp=894931896fc2a5f9a23c0d94907915d165d4cbf2;hpb=a3cb178b0bad32fa8be934503d051b96a3cb1fea;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/integer.pm b/lib/integer.pm index 8949318..86afcaf 100644 --- a/lib/integer.pm +++ b/lib/integer.pm @@ -28,16 +28,29 @@ code you'll be left with C<$x == 1.5>, C<$y == 2> and C<$z == -1>. The $z case happens because unary C<-> counts as an operation. +Native integer arithmetic (as provided by your C compiler) is used. +This means that Perl's own semantics for arithmetic operations may +not be preserved. One common source of trouble is the modulus of +negative numbers, which Perl does one way, but your hardware may do +another. + + % perl -le 'print (4 % -3)' + -2 + % perl -Minteger -le 'print (4 % -3)' + 1 + See L. =cut +$integer::hint_bits = 0x1; + sub import { - $^H |= 1; + $^H |= $integer::hint_bits; } sub unimport { - $^H &= ~1; + $^H &= ~$integer::hint_bits; } 1;