Perlなんですが・・・

このエントリーをはてなブックマークに追加
66名無しさん@お腹いっぱい。
こんにちわ、perlの事で質問させてください。
以下のスクリプトですが

 #! /usr/bin/perl  # お約束
 # 私のスクリプトそのままです(編集はしてません)
 $TMP = 10 ** 10;  # $TMP に10の10乗を代入
 $X = 10;  # $X に10を代入
 while ($TMP)  # $TMPが0になるまで繰り返し処理
  {$A = --$TMP % $X;  # $TMPの値を-1し、$Xの剰余を$Aに代入
  print "$A $TMP \n";}# 処置した値を画面に表示


上記のスクリプトですが、表示される$Aの値が変化しません
5 999999999
5 999999998
5 999999997 ......

$Xの値が1だと$Aは0で固定
$Xの値が2だと$Aは1で固定
$Xの値が3だと$Aは0で固定
$Xの値が4だと$Aは3で固定
$Xの値が5だと$Aは0で固定
$Xの値が6だと$Aは3で固定
$Xの値が7だと$Aは3で固定
$Xの値が8だと$Aは7で固定
$Xの値が9だと$Aは3で固定

私の知識が正しければ、$TMPの値を$Xで割った余りの数値が表示され
1行ごとに値が変更されると思うのですが。。。

どこか間違っているのでしょうか
識者の皆様、ご回答をお願いします
67名無しさん@お腹いっぱい。:02/02/04 12:00 ID:???
>識者の皆様、ご回答をお願いします
「皆様」に聞きたいなら初心者スレに書け。
ここは>>1に聞く為のスレだ。

>1行ごとに値が変更されると思うのですが。。。
固定されないが。
68初心者:02/02/04 13:31 ID:g/ay00Kk
>>64
必要性と言われても・・というのが正直なところです。
何らかの必要性があるからmyやlocalが存在するのでしょう。

一般的にグローバル変数は少ない方がいいとされています。
ソースを他人に見せるときや、昔書いたソースを見直すとき、
グローバル変数が無い方が理解しやすいです。

>>65 初心忘るべからず。

>>66
Perlのバージョンはいくつでしょう?
http://www.perldoc.com/perl5.6.1/pod/perldelta.html#Core-bug-fixes
の3項目、
Integer modulus on large unsigned integers
sometimes returned incorrect values.
と言うわけで、Perl5.6.0以降を使いましょう。
6966:02/02/04 13:53 ID:???
>>68 :初心者様
ご回答ありがとうございました
確認してみたところ、確かに、バージョンが古すぎました
(5.005_03)

$TMPの値を10**10 から 10**9 に変更して実施してみたところ
正常に動作することを確認しました
ご回答、ありがとうございました