| Bellacosa Mainframe apresenta IBM Mainframe REXX |
REXX no z/OS: Guia Completo com História, Dicas e Curiosidades
1. Introdução ao REXX
REXX, sigla para REstructured eXtended eXecutor, é uma linguagem de programação de alto nível criada por Mike Cowlishaw, da IBM, na década de 1980.
Diferente de linguagens tradicionais como C, COBOL e PL/I, REXX é interpretada, de fácil leitura e sem tipagem explícita. Todos os dados são tratados como strings, e o sistema decide quando fazer conversão para números.
💡 Curiosidade: Apesar de muitos acharem que o nome veio do cachorro de Cowlishaw, isso é um mito urbano do Mainframe.
REXX se espalhou por todos os principais ambientes IBM: z/OS, z/VM, z/VSE, IBM i, AIX, e até ferramentas modernas IBM. Por isso, é considerada uma linguagem universal no ecossistema IBM.
2. Variáveis e Literais
-
Variáveis não são case sensitive. Ou seja,
var,VARouVarsão a mesma variável. -
REXX não exige declaração de tipo e nem comprimento específico, embora existam limites definidos pelo sistema.
-
Literals (strings constantes) podem ser colocadas entre aspas simples
'...'ou duplas"...", sem diferença funcional.
💡 Dica: Sempre use aspas quando o conteúdo tiver espaços ou caracteres especiais.
3. Funções e Subrotinas
-
Subrotinas (
CALL) não precisam retornar valores. Elas executam ações e podem usarRETURNapenas para voltar ao ponto de chamada. -
Funções são chamadas para produzir valores, mas nem todas podem ser usadas como subrotinas.
-
Ponto de atenção: Não confunda subrotinas com funções – tentar chamar algumas funções como
CALLpode gerar erro.
4. Entrada de Dados
Existem três fontes principais:
-
Command Line / Argumentos:
-
Usados para passar parâmetros para o exec.
-
Sintaxe:
-
Ex.:
%‘meuexec’ JOAO 30
-
-
Stack (Data Stack):
-
Mecanismo central de entrada em REXX.
-
Comandos:
-
Pode receber dados de QUEUE, PUSH ou teclado (quando stack está vazia).
-
-
Keyboard (Interativo):
-
Se a stack estiver vazia,
PULLlê do teclado no ambiente interativo (TSO/E).
-
💡 Dica: PARSE PULL é como um canivete suíço: lê e separa os dados ao mesmo tempo.
Exemplo avançado:
5. Manipulação de Arquivos
-
EXECIO funciona com:
-
Sequential datasets
-
PDS / PDSE members
-
-
Não funciona diretamente com VSAM.
-
Para VSAM, use:
-
ISPF Data Set Services (
ISRSUPC,ISRSDSN) -
Chamada de utilitários MVS (ex.: IDCAMS)
-
-
💡 Exemplo simples de leitura de VSAM via ISPF:
6. Comando LINEOUT()
-
Escreve linha a linha, não permite random access.
-
Sempre escreve na ordem sequencial do arquivo ou data set.
💡 Dica: Para manipular arquivos VSAM de forma controlada, combine ISPF services e arrays REXX.
7. Stack e PULL
-
PULLremove registros do topo da stack. -
Alguns materiais citam acesso ao “fundo da stack”, mas na prática, o topo é a forma padrão de leitura.
-
QUEUEePUSHpermitem inserir dados na stack de forma controlada.
8. Execução e Ambiente
-
System REXX execs rodam em:
-
Console (z/OS)
-
Batch (JCL / MVS)
-
Programas via REXX Macro Interface
-
Não rodam diretamente em TSO/E como System exec.
-
Host command environment depende do contexto:
-
TSO/E →
ADDRESS TSO -
Batch →
ADDRESS MVS -
ISPF →
ADDRESS ISPEXEC
-
💡 Dica de ouro: Nunca presuma que TSO é o padrão universal. Cada address space tem seu ambiente próprio.
9. ISPF e Serviços REXX
-
ISPF fornece serviços avançados (
ISPEXEC) para criar:-
Macros de edição
-
Manipulação de datasets
-
Painéis interativos
-
-
⚠️ ISPF é principalmente para online, não para batch (a menos que configurado explicitamente).
💡 Easter Egg: Você pode escrever comandos de edição personalizados diretamente em REXX, algo que programadores z/OS amam usar para automatizar tarefas repetitivas.
10. Indentação e Compilação
-
REXX ignora indentação, tanto no interpretador quanto no compilador.
-
Compilação é opcional – você pode rodar execs diretamente no interpretador.
11. Curiosidades e Fatos Divertidos
-
Mike Cowlishaw nunca nomeou REXX após seu cachorro – é apenas uma lenda urbana.
-
REXX é usado em automação de Mainframe desde os anos 80.
-
É comum combinar REXX + ISPF + JCL + batch jobs para criar soluções totalmente automáticas em produção.
12. Resumo de Comandos Essenciais
| Comando / Função | Uso |
|---|---|
PARSE ARG | Ler argumentos passados na linha de comando |
PULL / PARSE PULL | Ler registros da stack |
QUEUE / PUSH | Inserir dados na stack |
EXECIO | Ler/escrever sequential e PDS/PDSE |
LINEOUT() | Escrever linhas sequenciais em arquivos |
ISPEXEC services | Trabalhar com VSAM, painéis e macros ISPF |
ADDRESS | Definir host command environment |
13. Pontos de Atenção para Mainframe
-
Nunca confunda funções com subrotinas.
-
Stack é sequencial, não aleatória.
-
EXECIO não acessa VSAM diretamente.
-
ISPF serviços são para online, não para batch.
-
Indentação é estética, não funcional.
-
Variáveis não têm tipagem, mas cuidado com operações numéricas implícitas.
14. Exemplo Final Integrado
Combina stack, PARSE PULL, e EXECIO.
Conclusão
REXX continua sendo uma ferramenta essencial para automação no Mainframe IBM.
Sua simplicidade, flexibilidade e integração com ISPF, TSO/E, batch e VSAM o tornam um verdadeiro canivete suíço para administradores e desenvolvedores Mainframe.
E lembre-se: não caia nos mitos – REXX não foi nomeado por um cachorro, mas por sua estrutura e poder de execução. 😉