PERFORM procedure-name-1 THROUGH procedure-name-2
VARYING identifier-2 FROM identifier-3
BY identifier-4 UNTIL condition-1
AFTER identifier-5 FROM identifier-6
BY identifier-7 UNTIL condition-2
- ID-2 と ID-5 が、
それらの初期値である ID-3 と ID-6 にそれぞれ設定されます。
- 条件-1 が次のように評価されます。
- 条件-1 が偽である場合には、ステップ 3 ~ 7 が実行されます。
- 条件-1 が真である場合には、制御権が PERFORM ステートメントに続くステートメントに直接渡されます。
- 条件-2 が次のように評価されます。
- 条件-2 が偽である場合には、ステップ 4 ~ 6 が実行されます。
- 条件-2 が真である場合には、ID-2 が ID-4 だけ増やされ、ID-5 が ID-6 の現行値に設定され、ステップ 2 が繰り返されます。
- プロシージャー名-1 からプロシージャー名-2 (指定されている場合) までのすべてのものが 1 回実行されます。
- ID-5 が ID-7 だけ増やされます。
- 条件-2 が真になるまで、ステップ 3 からステップ 5 が繰り返されます。
- 条件-1 が真になるまで、ステップ 2 からステップ 6 が繰り返されます。
PERFORM ステートメントの実行終了時には、次のようになります。
- ID-5 には ID-6 の現行値が入ります。
- ID-2 は、
最後に使用された設定値を増大 / 減少値分超える値をもちます (ただし、PERFORM ステートメントの実行開始時に条件-1 が真であった場合には、
ID-2 に ID-3 の現行値が入ります)。
図 1 は、TEST BEFORE 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。
図 2 は、TEST AFTER 句を使用して 2 つの ID を変更する場合の PERFORM ステートメントの論理を示したものです。
図 1. TEST BEFORE を使用して 2 つの ID を変更する場合
上の図では、ID-5 と ID-2 が関係をもたないことを想定してします。
一方が他方に依存している場合 (例えば添え字を介して)、結果は予測できますが、一般的に望ましいものではありません。
図 2. TEST AFTER を使用して 2 つの ID を変更する場合