BEGIN ブロック

BEGIN ブロックは、プログラムの標準の制御フローで実行される一連の Open PL/I 文です。BEGIN ブロックは、BEGIN 文を実行することによって呼び出され、パラメーターを持つことはできず、常に END 文を実行することによって制御を戻す点でプロシージャとは異なります。さらに、BEGIN ブロック内で RETURN 文が実行された場合は、BEGIN ブロックを直接含むプロシージャの呼び出し元に制御が戻ります。また、プロシージャとは異なり、BEGIN ブロックは ON 文の ON–unit として使用できます。

BEGIN ブロックは、プログラムの一連の文をグループ化し、そのブロック内で宣言される名前の範囲を定義します。BEGIN ブロックを使用する一般的な理由は、新しい範囲または新しいブロック (あるいはその両方) の有効化を作成することです。BEGIN ブロックには、DO グループ、SELECT グループ、DECLARE 文、およびプロシージャに加え、他の BEGIN ブロックも含めることができます。

BEGIN ブロックの文は、次の例に示すように、BEGIN 文と END 文の間に記述されます。

BEGIN;
   .
   .
   .
END;

BEGIN ブロックには宣言および ON-unit に加えて実行可能な文も含まれるため、名前および例外ハンドラーの一時的な再定義に使用できるほか、それに含まれる AUTOMATIC 変数の割り当ておよび解放にも使用できます(AUTOMATIC 変数の詳細については、「ストレージ クラス」のセクションを参照してください)。次に例を示します。

DECLARE SUM FIXED BINARY;
   .
   .
   .
BEGIN;
DECLARE SUM FILE;
DECLARE X(1000) FLOAT;
   .
   .
   .
END;

この例では、SUM をファイルとして使用できるように BEGIN ブロック内で再宣言しています。大きな配列 X は BEGIN ブロック内で宣言されており、BEGIN ブロックの実行中にのみ記憶域が割り当てられます。