有没有办法在REXX中做关联数组?

我有一些首先在Linux下开发的Perl代码(用于性能分析),现在需要移植到大型机。显然,REXX是该平台上的首选脚本语言,但是这个Perl脚本在很大程度上依赖于关联数组(基本上是索引是字符串的数组)。 有没有办法在REXX?我怎么编码像:
$arr{"Pax"} = "Diablo";
$arr{"Bob"} = "Dylan";
print $arr{"Pax"} . "n";
if (defined $arr{"no"}) {
        print "Yesn";
} else {
        print "Non";
}
    
已邀请:
你可以使用干变量,不像数组那样但非常相似
/* REXX */
NAME = PAX
ARRAY.NAME = "DIABLO"
NAME = BOB
ARRAY.NAME = "DYLAN"
NAME = 'PAX'
SAY "ARRAY.PAX " IS ARRAY.NAME
NAME = 'BOB'
SAY "ARRAY.BOB " IS ARRAY.NAME
NAME = 'SANDY'
SAY "ARRAY.SANDY " IS ARRAY.NAME
IF ARRAY.NAME = "ARRAY.SANDY" THEN SAY "ARRAY.SANDY IS EMPTY"
上面的Rexx将打印出来
ARRAY.PAX  IS DIABLO
ARRAY.BOB  IS DYLAN
ARRAY.SANDY  IS ARRAY.SANDY
ARRAY.SANDY IS EMPTY
它们也可以像a.b.c那样复合 如果为空,则干变量将自行返回。 没有办法迭代不使用连续数字的词干作为我所知道的索引。 参考Stem变量的IBM Manual Perl作为ZOS IBM Ported Tools for z / OS的额外免费功能提供     
我只想补充一点Deuian给出的答案。 我同意,REXX干变量 是答案。 简单的REXX变量默认为自己的名称。例如:
/* REXX */
SAY X
将打印“X”,直到
X
被赋予其他一些值:
/* REXX */
X = 'A'
SAY X
将打印“A”。 到目前为止没什么大惊喜。干变量有点不同。该 从不评估词干的头部,只是初始点后的位 是。 为了显示:
/* REXX */                                                           
X. = 'empty'   /* all unassigned stem values take on this value */
A. = 'nil'
B = 'A'        /* simple variable B is assigned value A */                                                      
X = 'A'        /* simple variable X is assigned value A */                                                      
SAY X.A        /* prints: empty */                                 
X.A = 'hello'  /* Stem X. associates value of A with 'hello' */
SAY X.A        /* prints: hello */                                   
SAY X.B        /* prints: hello */                                   
SAY X.X        /* prints: hello */                                   
请注意,不会评估
X
A
主干名称
X
A
变量出现在它们之后。有些人发现这个 有点令人困惑 - 想一想它就可以了 很有意义。 REXX的Z / OS版本不提供迭代的自然方式 一个词干变量。最简单的方法是构建自己的索引。 例如:
/* REXX */
X. = ''
DO I = 1 TO 10
  J = RANDOM(100, 500) /* Random # 100..500 */
  X.INDEX = X.INDEX J  /* concatinate J's with 1 space between */
  X.J = 'was picked'   /* Associate 'was picked' with whatever J evalauates to */
  END

DO I = 1 TO WORDS(X.INDEX) /* Number of blank delimited 'words' */
  J = WORD(X.INDEX, I)     /* Extract 1 'word' at a time */
  SAY J X.J                /* Print 'word' and its associated value */
  END
非常琐碎,但说明了这个想法。请确保
INDEX
(或任何你的名字 选择)保持索引名称永远不会弹出为关联值!如果可能,请使用其他变量来保存索引。 最后一点。请注意我的每个例子都以
/* REXX */
开头,你可能会发现 这需要是Z / OS下REXX程序的第一行。     

要回复问题请先登录注册