5

最近まで (すなわち C99)、モジュロ演算子の動作は C で定義された実装でした。Perl 5 は C で書かれているので、ビルドに使用された C コンパイラの動作に依存していますか?

4

2 に答える 2

10

いいえ、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プラグマを使用すると、C コンパイラに翻弄されます。

于 2010-08-31T15:40:37.870 に答える
2

Perl は独自のモジュロ演算子を実装していますが、integerプラグマを使用して C コンパイラからモジュロ演算子を取得できます。パーロップ言う

use integer がスコープ内にある場合、「%」を使用すると、C コンパイラによって実装されているモジュロ演算子に直接アクセスできることに注意してください。この演算子は、負のオペランドに対して適切に定義されていませんが、より高速に実行されます。

つまり、モジュロによって異なる答えが得られる可能性があるため、整数を使用する場合は注意が必要です。

于 2010-08-31T18:39:19.840 に答える