日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
SET SYMBOL |
コマンド・プロシージャ内で,ローカル・シンボルあるいはグローバル・シンボルへのアクセスを制御します。
SET SYMBOL
SET SYMBOL コマンドは,シンボルを未定義と見なして,コマンド・プロシージャでのローカル・シンボルとグローバル・シンボルのアクセスを制御します。外側のプロシージャ・レベルで定義されたすべてのグローバル・シンボルとローカル・シンボルは,内部のプロシージャ・レベルでアクセスできるため,通常,これらのシンボルを削除しないでマスクする必要があります。SET SYMBOL コマンドは,DCL がコマンド行を処理する前に,動詞文字列 (コマンド行上の最初のトークン) をシンボルとして変換するかどうかも制御します。省略時の設定では,変換が試みられます。この動作を変更すると,コマンドを起動したときに,コマンド・プロシージャが外側のプロシージャ・レベル環境から影響されないという利点があります。
シンボルの有効範囲コンテキストは,ローカル・シンボルとグローバル・シンボルとで異なります。ローカル・シンボルは,プロシージャ・レベルで独立です。外側のサブルーチン・レベルで定義されたローカル・シンボルは,内側のどのサブルーチン・レベルでも読み込めますが,書き込めません。外側のサブルーチン・レベルでローカル・シンボルに値を割り当てると,現在のサブルーチン・レベルで新しいシンボルが作成されます。ただし,外部のプロシージャ・レベルのシンボルは,変更されません。
つまり,SET SYMBOL/SCOPE=NOLOCAL コマンドは,外側のプロシージャ・レベルで定義されたすべてのローカル・シンボルを,現在のプロシージャ・レベル,および任意の内側のレベルからアクセスできないようにします。たとえば,SET SYMBOL/SCOPE=NOLOCAL コマンドをプロシージャ・レベル 2 および 4 で指定すると,プロシージャ・レベル 2 では,レベル 2 のローカル・シンボルだけを読み込み / 書き込みできます。レベル 3 では,レベル 2 のローカル・シンボルを読み込むことができ ( 書き込みはできません ),レベル 3 のローカル・シンボルを読み込み / 書き込みできます。レベル 4 では,レベル4のローカル・シンボルだけを読み込み / 書き込みできます。
グローバル・シンボルは,プロシージャ・レベルで独立しています。現在のグローバル・シンボルの有効範囲コンテキストは,以後すべてのプロシージャ・レベルに適用されます。/SCOPE=NOGLOBAL 修飾子を指定すると, /SCOPE=GLOBAL 修飾子を指定するか,プロシージャが終了してグローバル・シンボルをアクセスできる前のレベルに戻るまで,すべてのグローバル・シンボルは以後のすべてのコマンドからアクセスできなくなります。また,/SCOPE=NOGLOBAL 修飾子を指定すると, /SCOPE=GLOBAL 修飾子を指定するまで,新しいグローバル・シンボルを作成できなくなります。
あるプロシージャ・レベルを終了して前のプロシージャに戻ると,ローカル・シンボルとグローバル・シンボルの両方に対して,前のレベルからの有効範囲コンテキストが回復されます。
現在のシンボルの有効範囲状態を表示するには,レキシカル関数 F$ENVIRONMENT("SYMBOL_SCOPE") を使用します。
/ALL (省略時の設定)
/SCOPE 修飾子で指定した値が,コマンド行の最初のトークンの変換と,シンボル置換全般に適用されます。/ALL 修飾子は,/GENERAL や /VERB 修飾子と同時に指定できません。
/GENERAL
/SCOPE 修飾子で指定した値が,コマンド行の最初のトークンの展開を除いたシンボル置換全般に適用されます。/GENERAL 修飾子は,/ALL や /VERB 修飾子と同時に指定できません。
/SCOPE=(キーワード,...)
ローカルおよびグローバル・シンボルへのアクセスを制御します。未定義のシンボルとして扱います。指定できるキーワードを次に示します。
NOLOCAL 外側のプロシージャ・レベルで定義されたすべてのローカル・シンボルが,現在のプロシージャと内側のすべてのプロシージャ・レベルで未定義であるものとして扱われます。 LOCAL 現在のプロシージャ・レベルで設定された任意のシンボル変換制限を解除します。 NOGLOBAL 変更されるまで,すべてのグローバル・シンボルが,現在のプロシージャ・レベルと内側のすべてのプロシージャ・レベルでアクセスできないようにします。 GLOBAL すべてのグローバル・シンボルへのアクセスを元に戻します。
/VERB
/SCOPE 修飾子で指定した値が,コマンド行の最初のトークンの変換にのみ適用されることを指定します。シンボル置換全般には適用されません。
注意
1 つのコマンド・プロシージャ内で SET SYMBOL/VERB/SCOPE コマンドが 2 度以上使用されると警告が発せられます。DCL がラベルやサブルーチンの検索に変換動作を使用しているので,これがモードごとに変わってしまう可能性があるからです。 SET SYMBOL/VERB/SCOPE コマンドは,プロシージャのセットアップ時の一回だけにして,プロシージャ内ではそのモードを変更しないことをおすすめします。
/VERB 修飾子は,/ALL や /GENERAL 修飾子と同時に指定できません。
#1 |
---|
$ SET SYMBOL/SCOPE=NOLOCAL |
外側のプロシージャ・レベルで定義されたローカル・シンボルはすべて,現在のプロシージャとすべての内側のプロシージャ・レベルでは,未定義となります。
#2 |
---|
$ SET SYMBOL/SCOPE=NOGLOBAL |
もし他の方法で変更されなかったならば,すべてのグローバル・シンボルは,現在のプロシージャ・レベルとすべての内側のプロシージャ・レベルではアクセスできません。
#3 |
---|
$ NOW :== SHOW TIME $ ! $ NOW 3-NOV-2001 11:48:58 $ ! $ SET SYMBOL /VERB /SCOPE=NOGLOBAL $ NOW %DCL-W-IVVERB, unrecognized command verb-check validity and spelling \NOW\ $ ! $ SHOW SYMBOL NOW NOW == "SHOW TIME" |
この例は,/VERB 修飾子の使用方法を説明します。
シンボル NOW に SHOW TIME が代入され,次の行で省略時設定の動作が示されています。ここでは DCL は,コマンド行の最初の文字列 (NOW) を置換して, SHOW TIME コマンドを実行しています。
次の SET SYMBOL コマンドで,DCL がシンボル置換しないように指定します。そのため,文字列 NOW が動詞として評価され,コマンド・テーブルにないためエラー・メッセージが返されます。
次の SHOW SYMBOL コマンドで示されるように, /VERB 修飾子による動詞変換は,シンボル置換全般には影響しません。
目次 | 索引 |
|