REstructured eXtended eXecuxtor - a Macro Language derived loosly from PL/1 language written by Mike Cowlishaw at IBM.
Author: Mike Cowlishaw Homepage: http://www.rexxla.org Family: ScriptLanguage Platform: DOS/VSE OS/MVS, VM/CMS (IBM Mainframe), OS/2, Windows, Linux, Solaris, Amiga License: Open source and commercial versions are available.
Wikipedia: http://en.wikipedia.org/wiki/REXX REXX Language Association: http://www.rexxla.org/ Mike Colishaw's REXX Page: http://www.rexxla.org/About_Rexx/mfc/rexx.html Cetus REXX Links: http://www.cetus-links.org/oo_rexx.html IBM REXX Documentation Catalog: http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/FINDBOOK?filter=rexx Manmrk REXX Info page: http://manmrk.net/tutorials/rexx/index.htm Rex Swain's REXX Summary: http://www.rexswain.com/rexx.html (IBM VM/ESA) REXX Info.org http://www.rexxinfo.org/html/rexxinfo1.html Vladimir Zabrodsky's REXX Page: http://dhost.info/zabrodskyvlada/
IBM Open Object REXX: http://www.oorexx.org/ (Multi-platform) IBM NetREXX: http://www-01.ibm.com/software/awdtools/netrexx/ (REXX in Java) Jeff Glatt's Reginald: http://home.roadrunner.com/~jgglatt/rexx/reginald/win32/reglite.exe (Windows) Kilowatt Classic REXX: http://www.kilowattsoftware.com/r4Page.htm (Windows) Kilowatt Roo Object REXX: http://www.kilowattsoftware.com/rooPage.htm (Windows) Regina REXX: http://regina-rexx.sourceforge.net/ (Multi-platform) REXX/imc: http://users.comlab.ox.ac.uk/ian.collier/Rexx/rexximc.html (Unix/Linux?) Vassilis Vlachoudis' BRexx: http://bnv.home.cern.ch/bnv/software/BRexx/index.html (Multi-platform)
Jeff Glatt's REXX Utilities: http://home.roadrunner.com/~jgglatt/rexx/win32/rxusrw32.htm (Windows) Jeff Glatt Sample REXX Scripts: http://home.roadrunner.com/~jgglatt/rexx/examples.htm Patrick McPhee's REXX Utilities: http://pages.interlog.com/~ptjm/ (Multi-platform) Rex Swains's REXX Utilities: http://www.rexswain.com/rexxutils.html (Multi-platform)
Ian Collier's REXX Tutorial: http://users.comlab.ox.ac.uk/ian.collier/Rexx/info.html (REXX/imc) Kilowatt REXX Tutorial: http://www.kilowattsoftware.com/tutorial/rexx/ Kilowatt Roo Specification: http://www.kilowattsoftware.com/rooLang.htm#rexxAndRooPrograms IBM REXX/400 for AS/400: http://as400bks.rochester.ibm.com/cgi-bin/bookmgr/BOOKS/QBJAUV00/CCONTENTS?DT=19951027144645 The REXX API: http://www.quercus-sys.com/billp/api01cnt.html
Basically, it is a procedural language similar to but less powerful/complex than PerlLanguage.
Perl (Practical Extraction and Report Language) is specifically designed for text processing. It is intended to replace programs like awk and sed.
On IBM mainframes, it is as pervasive as both Perl and BourneShell? are on UNIX. Vast amounts of code are written in REXX that UNIX/Linux? and DOS/Windows? folks never see. It is easy to use, powerful, and simple. It is not as powerful as PERL (Please give examples! - no regex facilities) but it targets users, not power-users (some might cringe at this, since REXX was used to write large applications like FORABROWSE, a mainframe based equivalent to Usenet News with file sharing.) In particular, REXX on VM/SP (later VM/ESA and z/VM) was used as the primary scripting language, replacing the EXEC and EXEC2 languages in most instances, and REXX has mostly replaced CLIST in TSO.
The Amiga version of REXX (called ARexx) was used primarily as "glue" between programs, and not so much for writing new programs (as it was on the mainframe.)
On IBM OS/2, REXX functioned both as a "glue" and a means for writing programs, especially when used with WATCOM's VisualRexx? environment. It was very nice to use and had all of the power of VisualBasic? and more.
Versions of Open Object REXX exist for Windows, Linux, AIX, and Solaris.
There are two features that are particularly nice about REXX:
1. The PARSE command
2. The REXX stem variable concept
3. The support for using REXX as a general scripting language.
PARSE allows you to parse the parts of a string out into variables very easily. Much cleaner syntax that what PERL forces you to do, although also much more limited. PARSE can take its input from several sources, e.g., the parameter to the routine (ARG), an expression, a variable.
The REXX stem variable is a kind of hierarchical hash table.
Rexx allows an application to call Rexx macros in such a way that the Rexx code can call application defined functions and the functions can set Rexx variables. It is also possible for Rexx macros to pass commands to multiple command environments, e.g., both editor commands and host commands.
For more info on these, check out MikeCowlishaw's book "The Rexx Language".
Also, there is a version of REXX called NetRexx which emits java byte codes and can therefore make programs that run anywhere you have a java byte code interpreter.