Perlなんですが・・・ (119レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
66
(3): 名無しさん@お腹いっぱい。 [] 02/02/04 11:49 ID:fnAmBNHz(1)
こんにちわ、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行ごとに値が変更されると思うのですが。。。

どこか間違っているのでしょうか
識者の皆様、ご回答をお願いします
68
(1): 初心者 [] 02/02/04 13:31 ID:g/ay00Kk(2/2)
>>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以降を使いましょう。
69: 66 [sage] 02/02/04 13:53 ID:???
>>68 :初心者様
ご回答ありがとうございました
確認してみたところ、確かに、バージョンが古すぎました
(5.005_03)

$TMPの値を10**10 から 10**9 に変更して実施してみたところ
正常に動作することを確認しました
ご回答、ありがとうございました
70: 名無しさん@お腹いっぱい。 [] 02/02/04 20:08 ID:+YaLpde/(1)
>>66
老婆心ながら
変数名を3文字に統一しないなら「TMP」は「TEMP」にした方が良いね。
あと、66のスクリプトなら「$A]と「$X]の変数名は逆にしようよ

一番良いのは
$TEMP => $I(カウント変数)
$A    => $X(計算値変数)
$X    => $A(定数)

細かいけど、癖にしてたほうが後で役に立つよ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.014s