GLOBALREF は、グローバル シンボルを宣言するストレージ クラス属性および範囲属性です。グローバル シンボルは、外部プロシージャで GLOBALDEF 属性を使用して定義するか、外部プロシージャが別のプログラミング言語で記述されている場合はその言語の同等の機能を使用して定義します。形式は次のとおりです。
GLOBALREF [(name)]
ここで name は、他の Open PL/I 拡張機能との互換性を確保するための有効な構文として認められた識別子ですが、無視されるため、効力を発揮しません。
GLOBALREF 属性は、EXTERNAL 属性および STATIC 属性を暗黙指定します。GLOBALREF 属性では、1 つの変数を必要なだけ多くのプロシージャで宣言できます。GLOBALDEF と異なり、GLOBALREF では外部変数に実際の記憶域は割り当てられませんが、他の外部プロシージャで割り当てられた記憶域にアクセスできます。
GLOBALREF が存在する場合、変数の INITIAL 属性は無視されます。
P1: PROCEDURE; P2: PROCEDURE; DECLARE DECLARE XVAR FIXED BIN(15) XVAR FIXED BIN(15) GLOBALDEF; GLOBALREF; XVAR = 23; IF XVAR > 0 THEN XVAR = 100; CALL P2; . . . . . .
この例では、プロシージャ P1 で GLOBALDEF 属性を使用して XVAR が宣言され、その結果として記憶域が割り当てられます。XVAR に値 23 が割り当てられます。プロシージャ P2 では、GLOBALREF 属性を使用して XVAR を宣言してあるため、P1 で割り当てられたのと同じメモリの位置にアクセスします。プロシージャ P2 では、XVAR の値のテストまたは変更、またはその両方を実行できます。