基本 PERFORM ステートメント内で参照されるプロシージャーは一度実行され、その後、PERFORM ステートメントに続く次の実行可能ステートメントに制御が渡されます。
PERFORM ステートメント - 形式 1 >>-PERFORM------------------------------------------------------> >--+-プロシージャー名-1--+---------------------------------+-+->< | '-+-THROUGH-+--プロシージャー名-2-' | | '-THRU----' | '-命令ステートメント--END-PERFORM-------------------------'
プロシージャー名-1 とプロシージャー名-2 の両方を指定する場合、 いずれか一方が宣言プロシージャー内のプロシージャー名であれば、 両方が同じ宣言プロシージャー内のプロシージャー名でなければなりません。
PERFORM ステートメントを宣言セクションに入れる場合には、 プロシージャー名-1 とプロシージャー名-2 も宣言セクションに入れなければなりません。
プロシージャー名-1 を指定する場合には、命令ステートメントおよび END-PERFORM 句を指定してはなりません。
プロシージャー名-1 を省略する場合には、命令ステートメントおよび END-PERFORM 句を指定しなければなりません。
行内 PERFORM ステートメントは、プロシージャー名-1 (さらに、指定されている 場合はプロシージャー名-2) の範囲内に含まれているステートメントの代わりに 行内 PERFORM に含まれているステートメントが実行される点を除き、 行外 PERFORM ステートメントと同じ一般規則に従って機能します。
特に行内または行外という語によって限定されていない限り、 行外 PERFORM ステートメントに適用される規則は、すべて行内 PERFORM にも適用されます。
行外 PERFORM ステートメントが実行されるたびに、プロシージャー名-1 に指定されたプロシージャーの最初のステートメントに制御が転送されます。 制御は、PERFORM ステートメントに続くステートメントに必ず戻されます。 この制御がどの点から戻されるかは、次のように判別されます。
プロシージャー名-1 とプロシージャー名-2 の間に必要なのは、連続した一連の操作が、プロシージャー名-1 に指定されたプロシージャーから開始され、 プロシージャー名-2 に指定されたプロシージャーで終了されるという関係だけです。
PERFORM ステートメントを、実行されるプロシージャー内に指定できます。 戻り点への論理パスが複数ある場合には、プロシージャー名-2 に EXIT ステートメントだけで構成される段落を指定できます。 そのようにする場合には、戻り点へのすべてのパスをこの段落に導かなくてはなりません。
プロシージャー名-1 とプロシージャー名-2 の両方を指定する場合には、GO TO および PERFORM ステートメントをこれらの段落またはセクションに含まれる一連のステートメント内に指定できます。 GO TO ステートメントでは、プロシージャー名-1 とプロシージャー名-2 の範囲外のプロシージャー名を参照してはなりません。 それを行うと、結果は予測できないものとなり、診断もできなくなります。
プロシージャー名-1 だけを指定する場合には、PERFORM および GO TO ステートメントをそのプロシージャー内に指定できます。 GO TO ステートメントでは、プロシージャー名-1 の範囲外のプロシージャー名を参照してはなりません。 それを行うと、結果は予測できないものとなり、診断もできなくなります。
実行されるプロシージャーに別の PERFORM ステートメントが含まれている場合、 組み込まれた PERFORM ステートメントと関連する一連のプロシージャーは、最初の PERFORM ステートメントの実行されるプロシージャーに全体が含まれているか、 さもなければ全体が範囲外になければなりません。 すなわち、他の活動状態の PERFORM ステートメントの実行されるプロシージャーの範囲内から実行点が始まる PERFORM ステートメントは、 他の活動状態の PERFORM ステートメントの出口点を超えて制御を渡してはなりません。 さらに、そのような複数の活動状態の PERFORM ステートメントが、共通の出口をもってはなりません。
+----------------------------------IBM 拡張----------------------------------+
複数の活動状態の PERFORM ステートメントが共通の出口点を持つことができます。
+------------------------------End of IBM 拡張-------------------------------+
PERFORM ステートメント以外の方法で制御が一連のプロシージャーへ渡された場合には、 これらのプロシージャーを参照する PERFORM ステートメントがない場合と同じように、 制御が出口点を超えて次の実行可能ステートメントへ渡されます。