Variablen tragen unter OpenVMS den Namen Symbols und können mehr als nur Zahlen und Buchstaben speichern.
Symbols können entweder eine lokale oder globale Gültigkeit aufweisen. Ein lokales Symbol hat nur eine begrenze Gültigkeit während ein globales Symbol auch über mehrere Prozessebenen hinweg, z.B. verzweigte Batch-Jobs, gültig sein kann.
Ein Symbol wird wie folgt definiert:
$ SYMBOL_NAME OPERATOR WERT
Das folgenden Beispiel erstellt ein lokales Symbol namens FOO, das den Wert „BAR“ enthält:
$ FOO = BAR
Der Operator entscheidet über den Gültigkeitsbereich und den Datentyp des Symbols:
Operator | Gültigkeitsbereich | Datentyp |
---|---|---|
= | lokal | String/Integer |
:= | lokal | String |
== | global | String/Integer |
:== | global | String |
Einige weitere Beispiele:
$ FOO := BAR ! erstellt ein lokales Symbol FOO, das den String "BAR" enthält $ ZAHL == 12 ! erstellt ein globales Symbol ZAHL, das die Zahl 12 speichert $ BSP :== AB ! erstellt ein globales Symbol BSP; das den String "AB" erhält
Der Inhalt von Symbole wird mithilfe des SHOW-Befehls ausgegeben.
Angenommen, die folgenden beiden Symbole wurden definiert:
$ FOO = BAR $ ZAHL = 1337
Die Ausgabe der Symbole erfolgt nun wie folgt:
$ SHOW SYMBOL FOO FOO = "BAR" $ SHOW SYMBOL ZAHL ZAHL = 12 Hex = 0000000C Octal = 00000000014
Bei numerischen Symbolen wird der Wert in dezimal (10er Basis), hexadezimal (16er Basis) und oktal (8er Basis) ausgegeben.
Wenn bereits vorhandene Kommentare oft mit bestimmten Qualifizierern ausgeführt werden, können diese in einem eigenen gleichnamigen Alias definiert werden.
Angenommen, Dateien werden immer auf der Druckerwarteschlange PRINTERD ausgedruckt - der folgende Alias (übrigens ein globales String-Symbol) verhindert, dass der Qualifizierer /QUEUE=PRINTERD jedes Mal explizit angegeben werden muss:
$ PRINT :== PRINT/QUEUE=PRINTERD
In DCL werden Befehl oftmals abgekürzt - von nahezu jedem Befehl gibt es eine logische Kurzform, beispielsweise DELETE/DEL oder EDIT/EDT.
Eine solche Abbreviation wird z.B. wie folgt definiert:
$ PR*INT :== PRINT/QUEUE=PRINTERD
Der Befehlsalias PRINT führt den Befehl PRINT automatisch mit dem Qualifizierer /QUEUE=PRINTERD aus und kann auch als PR abgekürzt werden.
Es ist auch möglich, mit Symbolen zu rechnen - hierfür stehen die üblichen 4 Operatoren zur Verfügung:
Operator | Verwendung |
---|---|
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Division |
DCL kennt auch runde Klammern und verwendet diese zur Definition von Berechnungsreihenfolgen.
Zwei Beispiele:
$ ZAHL = 2 * (5+5) $ SHOW SYMBOL ZAHL ZAHL = 20 Hex = 00000014 Octal = 00000000024 $ ZAHLB = ZAHL * 2 $ SHOW SYMBOL ZAHLB ZAHL = 40 Hex = 00000028 Octal = 00000000050
Strings können mithilfe des Plus-Operators aneinander gehängt werden:
$ WORT = "WELT" $ WORT := "HALLO " + WORT $ SHOW SYMBOL WORT WORT = "HALLO WELT"
Symbole werden mithilfe des DELETE-Kommandos entfernt - bei globalen Symbolen wird noch der Qualifizierer /GLOBAL benötigt:
$ WORTA = "Hallo" $ WORTB == "Welt" $ DELETE/SYMBOL WORTA $ DELETE/SYMBOL/GLOBAL WORTB