Until recently (i.e. C99), the behavior of the modulo operator was implementation defined in C. Since Perl 5 is written in C, is it reliant on the behavior of the C compiler used to build it?
+10
A:
No, Perl 5 defines the modulo operator in perlop
and even has tests to ensure it works as documented.
from perl/t/op/arith.t
tryeq $T++, 13 % 4, 1;
tryeq $T++, -13 % 4, 3;
tryeq $T++, 13 % -4, -3;
tryeq $T++, -13 % -4, -1;
However, if you use the integer
pragma, you are at the mercies of the C compiler.
Chas. Owens
2010-08-31 15:40:37
It's worth adding that C99 specifies a [different, incompatible behaviour](http://stackoverflow.com/questions/3609572/does-either-ansi-c-or-iso-c-specify-what-5-10-should-be).
Philip Potter
2010-09-01 13:09:19
+2
A:
Perl implements its own modulo operator, but you can get to the one from your C compiler by using the integer pragma. perlop says
Note that when use integer is in scope, "%" gives you direct access to the modulo operator as implemented by your C compiler. This operator is not as well defined for negative operands, but it will execute faster.
That is, you have to be careful when you are using integer because the modulo might give you different answers.
brian d foy
2010-08-31 18:39:19