Функция VALUE в качестве результата возвращает значение символа с указанным именем и, по требованию, присваивает ему новое значение. По умолчанию функция VALUE обращается к текущей среде переменных REXX, но могут быть выбраны и другие, внешние, коллекции переменных. Если Вы используете функцию VALUE для получения информации о переменных REXX, то значение имени должно быть действительным символом языка REXX. (Вы можете убедиться в этом, используя функцию SYMBOL). Строчные буквы указанного имени переводятся в прописные. Если имя является составным, то REXX подставляет значения символов для получения производного имени символа.
Если Вы указали аргумент новое-значение, то указанной поименованной переменной присваивается это новое значение. Данное действие не влияет на возвращенный результат; т.е. функция возвращает значение указанного имени таким, каким оно было до выполнения новой операции присваивания.
Ниже приведено несколько примеров: /* После: Drop A3; A33=7; K=3; fred='K'; list.5='Hi' */ VALUE('a'k) -> 'A3' VALUE('a'kk) -> '7' VALUE('fred') -> 'K' /* ищет FRED */ VALUE(fred) -> '3' /* ищет K */ VALUE(fred,5) -> '3' /* и устанавливает K=5 */ VALUE(fred) -> '5' VALUE('LIST.'k) -> 'Hi' /* ищет LIST.5 */
Чтобы использовать функцию VALUE для манипуляции переменными среды OS/2, в качестве значения переключателя должна быть указана строка 'OS2ENVIRONMENT' или выражение, результатом вычисления которого будет эта же строка. В этом случае переменная с указанным именем не должна быть действительным символом языка REXX. Когда функция VALUE используется для установки или изменения значения переменной среды, новое значение сохраняется после завершения выполнения процедуры REXX.
Ниже приведено несколько примеров: /* Дано: внешняя переменная FRED имеет значение 4 */ share = 'OS2ENVIRONMENT' say VALUE('fred',7,share) /* выводит '4' и присваивает */ /* переменной FRED значение 7 */
say VALUE('fred',,share) /* выводит '7' */
/* После выполнения процедуры FRED снова имеет значение 4 */ /* Получение доступа и изменение переменных среды OS/2 */ env = 'OS2ENVIRONMENT' new = 'C:\LIST\PROD;' say value('prompt',,env) /* выводит '$i[p]' (возможно) */ say value('path',new,env) /* выводит 'C:\EDIT\DOCS;' (возможно) */ /* и устанавливает PATH = 'C:LIST\PROD' */ say value('path',,env) /* выводит 'C:LIST\PROD' */ /* По завершении процедуры PATH = 'C:\LIST\PROD' */