【问题标题】:Is the behavior of % with negative operands defined in Perl 5?% 的行为是否在 Perl 5 中定义了负操作数? 【发布时间】:2011-04-06 08:35:12 【问题描述】: 直到最近(即 C99),模运算符的行为是在 C 中定义的。由于 Perl 5 是用 C 编写的,它是否依赖于用于构建它的 C 编译器的行为? 【问题讨论】: 标签: perl modulo 【解决方案1】: 不,Perl 5 在 perlop 中定义了模运算符,甚至还进行了测试以确保它按文档说明工作。 来自 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; 但是,如果您使用 integer pragma,您将受到 C 编译器的怜悯。 【讨论】: 值得补充的是,C99 指定了一个different, incompatible behaviour。 【解决方案2】: Perl 实现了它自己的模运算符,但您可以通过使用 integer pragma 从您的 C 编译器中获得模运算符。 perlop 说 请注意,当使用整数在范围内时,“%”让您可以直接访问由 C 编译器实现的模运算符。该运算符对于负操作数的定义不是很好,但它会执行得更快。 也就是说,你在使用integer 时必须小心,因为模数可能会给你不同的答案。 【讨论】: