Time for a follow up to my original posting...
First, and more immediately important, I am no longer encountering the problem. I do not say that I have fixed or resolved it, as I am really not sure what was wrong and why it is no longer happening. The only thing I can say is that I copied the system statement from my example, inserted it next to the one that was failing, and then edited it to reflect the few differences between the one that was working and what I needed the failing statement to do. At this point it started working. I do not see WHY it should have started working, nor why it was failing. But the bottom line is that it is now working.
There was a question as to why I was using the @cmd array variable. I am embarrased to say that it was just sloppiness. I had copied sections of code from various examples around the Internet and apparently had included this extraneous step when I copied the system usage code. I have removed that extra bit of logic and tested things successfully, so thank you for the observation.
I am running this on both Windows 2000 Pro and Windows XP Pro. The machines themselves are quite big, (System 1 - P4 3.GHz with hyperthreading, 1GB, 800MHz FSB, Serial ATA disks in RAID configuration, 875 chipset ASUS motherboard; System 2 - dual P4 2.2 GHz, 1GB, IDE RAID) so there is no way I should be running into a process table size limitation. Certainly not with the small number of processes I'm using for this build vs. the large number that run when I'm performing some other tasks.
There are a few things I still need to add to this script set:
1 - Concurrency - There are steps that can run concurrently, particularly when I'm building bits on other machines (a set of Unix/Linux systems for example). I haven't taken the leap into multi-threading my Perl, though I've done plenty of C/C++ multi-threaded code, so I'm not entirely clueless. I'd appreciate some advise and/or pointers to good example code that I can copy from rather than having to spin my own from scratch.
2 - Improved logging - right now I have a mishmash of logging going on. Some things get written directly to a "trace" log, things building on remote systems don't get results until the entire build on them has finished when I'd really like to get some interactive feedback of what is happening, some system commands get redirected to their own log file (primarily so their results can be checked), which also makes useful progress reports far more difficult. I'd love some advise and/or pointers on how I might clean this up.
3 - I need to automate some tasks that actually occur on an MVS system (VSAM+CICS, VSE+CICS, "Started Task+CICS" with some VM sprinkled in). Doing this stuff manually with a "green screen" emulator takes far too long and is much too error prone. But my local MVS system analyst/software developer/administrator keeps telling me it can't be done. I'm sure it CAN be done, though not sure how, and certainly it still could take a LOT of effort. Any advise and/or pointers would be quite appreciated.
So, thank you everyone for your help. It is invaluable as always, even if in this specific case the initial problem seems rather elusive and has vanished of its own accord.
-Marc