PERFORM(実行)文は、いくつかの手続きに制御を明示的に移し、その手続きの実行が終了した時点で、暗黙的に制御を戻すために使用する。
PERFORM文は、その有効範囲内にあるいくつかの無条件命令の実行を制御するためにも使用する。
PERFORM文は、配列の各要素を処理するために使用する。
手続き部 - ENTER - INVOKEの章のEXIT(出口)文EXIT(出口)文節を参照。
無条件文-1を書けば、END-PERFORM指定を省略してもよい。
手続き名-1と無条件文-1を両方とも省略してもよい。
この制限は適用されない。
形式 4では、AFTER指定を6つ書ける。
この制限は、15にまで拡大されている。
または、内PERFORM文自体の中に含まれている文
を「指定された文の組」という。
PERFORM文の実行中は、一意名-1は指定された次の実行回数を、一意名-1のデータ項目の初期値によって示される回数から変えることはできない。
整数-1はゼロまたは正でなければならない。符号を付けてもよい。
TEST BEFOREが指定、または暗黙に指定されていると、
制御は手続き名-1へ移行されず、PERFORM文の末尾に移される。
TEST AFTERが指定されている場合も、PERFORM文はTEST BEFOREが指定されているのと同じように機能する。ただし、終了条件の判定が行われるのは、指定された文の組が実行されてからとなる。条件-1中に指定された作用対象に関連する添字付けまたは部分参照は、条件が検査されるたびに評価される。
UNTIL EXITを指定すると、指定された文の組は、その中のいずれかの文によって終了させられるまで、繰り返し実行される。外PERFORM文の場合は、この繰り返しを終了させられる文は、EXIT PROGRAMおよびSTOP RUNだけである。内PERFORM文の場合は、EXIT PERFORM文およびGO TO文によっても、この繰り返しを終了させることができる。
指標名-1を指定する場合、PERFORM文の実行を開始する時点での一意名-3、指標名-2、定数-1の値は、指標名-1を用いている表の中の要素の出現番号と対応させる。指標名-3を指定する場合、PERFORM文の実行を開始する時点での一意名-6、指標名-4、定数-3の値は、指標名-3を用いている表の中の要素の出現番号と対応させる。
下に述べるように、指標名-1または指標名-3を増加させていく際に、指標の値は対応する表の範囲を超えてはならない。ただし、PERFORM文の実行が終了する際には、指標の値は対応する表の範囲から1増分または1減分だけ外れることがある。
一意名-2または一意名-5に添字が付けられている場合、これらの一意名のデータ項目の内容が設定または増加されるたびに、その添字が評価される。一意名-3、一意名-4、一意名-5、一意名-6に添字が付けられている場合、これらの一意名のデータ項目の内容が設定または増加の処理に使用されるたびに、その添字が評価される。条件-1または条件-2の中に指定されている作用対象に添字または部分参照が適用されていると、条件が検査されるたびにその添字または部分参照が評価される。
以降に、形式 4のPERFORM文がどのように機能するかを示す例を掲げる。
1つの一意名のデータ項目の値を変化させる場合、PERFORM文の実行開始時点で、一意名-2のデータ項目の内容が、定数-1または一意名-3のデータ項目の現在の値に設定される。UNTIL指定の条件-1が偽であれば、指定された文の組が1回実行される。次いで、一意名-2のデータ項目の値が指定された値(定数-2または一意名-4のデータ項目の値)だけ増分または減分されて、条件-1が再び評価される。この処理が、条件-1が真になるまで繰り返される。PERFORM文の実行開始時点で条件-1が真である場合は、制御はPERFORM文の末尾に移される。 図 15-1を参照。
図 15-1: PERFORM文の機能の流れ図 - VARYING, TEST BEFORE, 1つの条件
2つの一意名のデータ項目の値を変化させる場合、PERFORM文の実行開始時点で、一意名-2のデータ項目の内容が、定数-1または一意名-3のデータ項目の現在の値に設定される。また、一意名-5のデータ項目の内容が、定数-3または一意名-6のデータ項目の現在の値に設定される。図 15-2を参照。
これから条件-1が評価される。この結果が真である場合は、制御はPERFORM文の末尾に移される。この結果が偽である場合は、条件-2が評価される。この結果が偽であれば、指定された文の組が1回実行される。次いで、一意名-5のデータ項目の値が、定数-4または一意名-7のデータ項目の現在の値だけ増分または減分される。それから条件-2が再び評価される。
この処理が、条件-2が真になるまで繰り返される。条件-2が真になると、一意名-2のデータ項目の値が、定数-2または一意名-4のデータ項目の現在の値だけ増分され、一意名-5のデータ項目の内容が、定数-3または一意名-6のデータ項目の現在の値に設定され直される。この後、条件-1が再び評価される。条件-1が真である場合は、PERFORM文の実行は終了する。そうでなければ、条件-1が真になるまで、この処理が繰り返される。
PERFORM文の実行が終了した時点では、一意名-5のデータ項目には定数-3または一意名-6のデータ項目の現在の値が入っている。一意名-2のデータ項目には、増分または減分によって最後に設定された値が入っている。ただし、PERFORM文の実行が開始された時点で条件-1が真であった場合には、一意名-2のデータ項目には、定数-1または一意名-3のデータ項目の現在の値が入っている。
図 15-2: PERFORM文の機能の流れ図 - VARYING, TEST BEFORE, 2つの条件
1つの一意名のデータ項目の値を変化させる場合、PERFORM文の実行開始時点で、一意名-2のデータ項目の内容が、定数-1または一意名-3のデータ項目の現在の値に設定される。そして、指定された文の組が1回実行される。それから、UNTIL指定の条件-1が検査される。この結果が偽であれば、一意名-2のデータ項目の値が指定された値(定数-2または一意名-4のデータ項目の値)だけ増分または減分されて、指定された文の組が再び実行される。この処理が、条件-1の検査結果が真になるまで繰り返される。条件-1の検査結果が真になると、制御はPERFORM文の末尾に移される。図 15-3を参照。
図 15-3: PERFORM文の機能の流れ図 - VARYING, TEST AFTER, 1つの条件
2つの一意名のデータ項目の値を変化させる場合、PERFORM文の実行開始時点で、一意名-2のデータ項目の内容が、定数-1または一意名-3のデータ項目の現在の値に設定される。また、一意名-5のデータ項目の内容が、定数-3または一意名-6のデータ項目の現在の値に設定される。そして、指定された文の組が1回実行される。それから条件-2が評価される。この結果が偽であれば、一意名-5のデータ項目の値が、定数-4または一意名-7のデータ項目の現在の値だけ増分または減分されて、指定された文の組が再び実行される。この処理が、条件-2の評価結果が真になるまで繰り返される。条件-2が真になると、今度は条件-1が評価される。この結果が偽である場合は、一意名-2のデータ項目の値が、定数-2または一意名-4のデータ項目の現在の値だけ増分または減分され、� 意名-5のデータ項目の内容が、定数-3または一意名-6のデータ項目の現在の値に設定し直される。この後、指定された文の組が再び実行される。この処理が、条件-1の評価結果が真になるまで繰り返される。条件-1が真になると、制御はPERFORM文の末尾に移される。図 15-4を参照。
PERFORM文の実行が完了すると、AFTER指定またはVARYING指定によって変えられた各データ項目には、指定された文の組が最後に実行されたときの内容が入っている。
図 15-4: PERFORM文の機能の流れ図 - VARYING, TEST AFTER, 2つの条件
PERFORM文に指定された文の組が実行されている間に、VARYING変数(一意名-2のデータ項目および指標名-1)、BY変数(一意名-4のデータ項目)、AFTER変数(一意名-5のデータ項目および指標名-3)、FROM変数(一意名-3のデータ項目および指標名-2)の変化が考慮に入れられて、以降のPERFORM文の実行に影響を及ぼす。
2つの一意名のデータ項目を変化させる場合、一意名-2のデータ項目が変化するたびに、一意名-5のデータ項目は変化の全過程(FROM, BY, UNTIL)を経る。3つ以上の一意名のデータ項目の内容を変化させる場合も、その仕組みは基本的には2つの場合と同じである。ただし、AFTER指定によって変化させるデータ項目は、その前にあるAFTER指定の作用対象が増分または減分されるたびに、変化の全過程を経る。
これらの制限は強制しない。PERFORM文を入れ子にすることも、再帰させる(あるPERFORM文の手続きの中にそのPERFORM文を含める)ことも許される。現在実行されているPERFORM文の最も内側の出口だけが認識される。これらの規則はPERFORM-TYPEコンパイラ指令を使用することによって変更できる。
PERFORM文の正しい構成の例を、下に示す。
これらの制限は適用しない。
これらの制限は適用しない。