我有一些在Linux下开发的PERL代码(用于性能分析),现在需要移植到大型机。显然,Rexx是该平台上选择的脚本语言,但是此Perl脚本在很大程度上取决于关联数组(基本上是索引是字符串的数组)。

REXX有没有办法?我将如何编码类似的内容:

$arr{"Pax"} = "Diablo";
$arr{"Bob"} = "Dylan";
print $arr{"Pax"} . "\n";
if (defined $arr{"no"}) {
        print "Yes\n";
} else {
        print "No\n";
}
有帮助吗?

解决方案

您可以使用词干变量,不完全像数组,但非常相似

/* 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

如果空会返回自身,它们也可以像ABC一样复合词干变量。无法使用连续数字作为我所知道的索引的迭代。

IBM手册参考词干变量

Perl可以作为ZOS的额外免费功能可用 Z/OS的IBM移植工具

其他提示

我只想在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 */                                   

注意 XA 但是,尚未评估词干名称XA 在它们之后出现的变量。有些人发现这有点令人困惑 - 一段时间考虑一下,这很有意义。

REXX的Z/OS版本不能提供自然的方式来迭代STEM变量。最简单的方法是构建自己的索引。例如:

/* 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程序的第一行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top