ある段落 (または、ある範囲の複数の段落) が PERFORM ステートメント (「行外 PERFORM」) によって実行されるとき、指定範囲の段落の終了時のメカニズムによって、制御が PERFORM ステートメントの直後に戻るようになっています。
PERFORM A
STOP RUN.
A. DISPLAY "Hi".
B. DISPLAY "there".
メッセージ「Hi」を表示した後、コンパイラー生成コードは段落 A の実行後に制御のフローが STOP RUN ステートメントへ戻るようにします。これが行われないと、制御が段落 B に移ることになります。
このコード・メカニズムは、プログラムが初めて呼び出されたとき、またはプログラムが 取り消されたときに、初期状態にリセットされます。NOCMPR2 のもとでは、さらに、プログラムが呼び出されるたびにリセットされます。CMPR2 のもとでは、プログラムが取り消されずに連続して 2 回呼び出されたとき、このメカ ニズムは最後に使用された状態のままになります。これは、PERFORM ステートメントすべての実行が完了する前にプログラムが EXIT PROGRAM また は GOBACK ステートメントを出すような場合に重要になります。
IF FIRST-TIME-CALLED THEN
PERFORM A
MOVE ZERO TO N
ELSE
SUBTRACT 1 FROM N
GO TO A.
GOBACK.
A. IF N > 1 THEN
GOBACK.
B. DISPLAY "Processing continues...".
スイッチ FIRST-TIME-CALLED がプログラムに渡されました。このスイッチは、プログラ ムが取り消されずに呼び出されたかどうかをプログラムに通知します。変数 N もプログラムに渡されました。