I did see the following in the System docs:
On Windows, only the system PROGRAM LIST syntax will reliably avoid using the shell; system LIST , even with more than one element, will fall back to the shell if the first spawn fails.
And was thinking mistakenly that array flattening would suffice. It appears that if "USE_RTL_SPAWNVP" is defined, that horror show is avoided though yes? A quick look in the code didn't reveal if that's true or if it's even defined in the common case. But fwiw, I did see a note in the code recommending Win32::Process instead.