Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
最近まで (すなわち C99)、モジュロ演算子の動作は C で定義された実装でした。Perl 5 は C で書かれているので、ビルドに使用された C コンパイラの動作に依存していますか?
いいえ、Perl 5 ではモジュロ演算子が定義されperlopており、文書化されているとおりに動作することを確認するためのテストさえあります。
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 コンパイラに翻弄されます。
integer
Perl は独自のモジュロ演算子を実装していますが、integerプラグマを使用して C コンパイラからモジュロ演算子を取得できます。パーロップ言う
use integer がスコープ内にある場合、「%」を使用すると、C コンパイラによって実装されているモジュロ演算子に直接アクセスできることに注意してください。この演算子は、負のオペランドに対して適切に定義されていませんが、より高速に実行されます。
つまり、モジュロによって異なる答えが得られる可能性があるため、整数を使用する場合は注意が必要です。