LEICHTER@VENUS.YCC.YALE.EDU ("Jerry Leichter ", LEICHTER-JERRY@CS.YALE.EDU) (05/26/88)
In a recent message, I said that DCL provided a syntax for specifying SYMBOL SUBSTITUTION anywhere (the apostrophe), but no mechanism for specifying GENERAL EXPRESSION EVALUATION. After thinking about it a bit more, I realized that this is false: Since symbol substitution includes evaluation of lexicals, and evaluation of lexicals can cause general expression evaluation, you can get the effect by using the F$STRING() lexical in an unexpected way. Thus, suppose X1 and X2 contain integers and, for whatever reason, you want to create a file whose name is the sum of the two integers. The direct approach is: $ X = X1 + X2 $ CREATE 'X' The DCL hacker's approach is: $ CREATE 'F$STRING(X1 + X2)' You can use any expression you like as an argument to F$STRING. If you want an integer, rather than a string, result, you can use F$INTEGER instead. I can't see any way to make this polymorphic (i.e., get back a string or integer depending on what the expression evaluated to), but I also can't think of any reason why you'd want to do that. Of course, this works for quoted strings, too: $ SEARCH/EXACT FILE.TXT "The number is ''F$STRING(X1 + X2)'" -- Jerry
LEICHTER%Venus.YCC.Yale.EDU%KL.SRI.COM%lbl%sfsu1.hepnet@LBL.GOV (05/29/88)
Received: from KL.SRI.COM by LBL.Gov with INTERNET ; Sat, 28 May 88 21:05:39 PDT Received: from Venus.YCC.Yale.Edu by KL.SRI.COM with TCP; Thu 26 May 88 06:16:54-PDT Date: Thu, 26 May 88 09:05 EST From: "Jerry Leichter (LEICHTER-JERRY@CS.YALE.EDU)" <LEICHTER@Venus.YCC.Yale.Edu> Subject: Forcing expression evaluation in DCL To: INFO-VAX@KL.SRI.COM X-VMS-To: INFOVAX In a recent message, I said that DCL provided a syntax for specifying SYMBOL SUBSTITUTION anywhere (the apostrophe), but no mechanism for specifying GENERAL EXPRESSION EVALUATION. After thinking about it a bit more, I realized that this is false: Since symbol substitution includes evaluation of lexicals, and evaluation of lexicals can cause general expression evaluation, you can get the effect by using the F$STRING() lexical in an unexpected way. Thus, suppose X1 and X2 contain integers and, for whatever reason, you want to create a file whose name is the sum of the two integers. The direct approach is: $ X = X1 + X2 $ CREATE 'X' The DCL hacker's approach is: $ CREATE 'F$STRING(X1 + X2)' You can use any expression you like as an argument to F$STRING. If you want an integer, rather than a string, result, you can use F$INTEGER instead. I can't see any way to make this polymorphic (i.e., get back a string or integer depending on what the expression evaluated to), but I also can't think of any reason why you'd want to do that. Of course, this works for quoted strings, too: $ SEARCH/EXACT FILE.TXT "The number is ''F$STRING(X1 + X2)'" -- Jerry