HP OpenVMS DCL Dictionary
SET SYMBOL
Controls access to local and global symbols in command procedures.
Format
SET SYMBOL
Description
The SET SYMBOL command controls access to local and global symbols in
command procedures by treating symbols as undefined. Because all global
and local symbols defined in an outer procedure level are accessible to
inner procedure levels, it is often necessary to mask these symbols
without deleting them.
The SET SYMBOL command also controls whether DCL will attempt to
translate the verb string (the first token on the command line) as a
symbol before processing the line. The default behavior is that the
translation is attempted. The advantage to changing this behavior is
that a command procedure will not be affected by outer procedure level
environments when invoking a command.
The symbol scoping context is different for local and global symbols.
Local symbols are procedure level dependent. Local symbols defined in
an outer subroutine level can be read at any inner subroutine level,
but they cannot be written to. If you assign a value to a symbol that
is local to an outer subroutine level, a new symbol is created at the
current subroutine level; however, the symbol in the outer procedure
level is not modified.
This means that the SET SYMBOL/SCOPE=NOLOCAL command causes all local
symbols defined at an outer procedure level to be inaccessible to the
current procedure level and any inner levels. For example, if SET
SYMBOL/SCOPE=NOLOCAL was specified at procedure levels 2 and 4,
procedure level 2 can read and write to only level 2 local symbols.
Level 3 can read (but not write to) level 2 local symbols and can read
and write to level 3 local symbols. Level 4 can read and write to only
level 4 local symbols.
Global symbols are procedure-level independent. The current global
symbol scoping context is applied subsequently to all procedure levels.
Specifying the /SCOPE=NOGLOBAL qualifier causes all global symbols to
become inaccessible for all subsequent commands until either the
/SCOPE=GLOBAL qualifier is specified or the procedure exits to a
previous level at which global symbols were accessible. In addition,
specifying the /SCOPE=NOGLOBAL qualifier prevents you from creating any
new global symbols until the /SCOPE=GLOBAL qualifier is specified.
When you exit a procedure level to return to a previous procedure, the
symbol scoping context from the previous level is restored for both
local and global symbols.
To display the current symbol scoping state, use the lexical function
F$ENVIRONMENT("SYMBOL_SCOPE").
Qualifiers
/ALL (default)
Specifies that the values of the /SCOPE qualifier pertain both to the
translation of the first token on a command line and to general symbol
substitution.
The /ALL qualifier is incompatible with the /GENERAL or the /VERB
qualifier.
/GENERAL
Specifies that the values of the /SCOPE qualifier pertain to the
translation of all symbols except the first token on a command line.
The /GENERAL qualifier is incompatible with the /ALL or the /VERB
qualifier.
/SCOPE=(keyword,...)
Controls access to local and global symbols. Lets you treat symbols as
being undefined. Possible keywords are as follows:
NOLOCAL
|
Causes all local symbols defined in outer procedure levels to be
treated as being undefined by the current procedure and by all inner
procedure levels.
|
LOCAL
|
Removes any symbol translation limit set by the current procedure level.
|
NOGLOBAL
|
Causes all global symbols to be inaccessible to the current procedure
level and to all inner procedure levels unless otherwise changed.
|
GLOBAL
|
Restores access to all global symbols.
|
/VERB
Specifies that the values of the /SCOPE qualifier pertain to the
translation of the first token on a command line as a symbol before
processing only. It does not affect general symbol substitution.
Note
Caution must be used if the SET SYMBOL/VERB/SCOPE command is used more
than once in a command procedure. Because DCL uses the translation
behavior when looking for a label or subroutine, execution may be
different running in one mode than in another. HP recommends that the
SET SYMBOL/VERB/SCOPE command be used once as part of the command
procedure setup and left in that mode for the duration of the
procedure.
|
The /VERB qualifier is incompatible with the /ALL or the /GENERAL
qualifier.
Examples
#1 |
$ SET SYMBOL/SCOPE=NOLOCAL
|
In this example, all local symbols defined in outer procedure levels
are now undefined for the current procedure level and all inner
procedure levels.
#2 |
$ SET SYMBOL/SCOPE=NOGLOBAL
|
In this example, all global symbols are now inaccessible to the current
procedure level and all inner procedure levels unless otherwise changed.
#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"
|
This example demonstrates the use of the /VERB qualifier.
The symbol NOW is assigned to the SHOW TIME command. The next line
shows the default behavior, where DCL attempts to translate the first
string on the command line (NOW). Because NOW translates to the SHOW
TIME command, this is used instead of NOW.
The SET SYMBOL command on the next line changes the behavior so that
DCL does not attempt a translation. When NOW is subsequently entered,
DCL uses the string NOW as the command verb and cannot find it in the
command table. This results in the error message.
Notice that the scoping of the verb translation has no effect on
general symbol translations, as demonstrated by the SHOW SYMBOL command
in the example.
|