That's not really a wait issue. When closing a piped open filehandle, if the opened command exits with a non-zero and that's the only issue with the command, then $! is set to 0. So the code above is using the tertiary operater to check that condition. I thought that might be the issue too but the OP said it worked fine from the command line so more than likely there's either a path or permisssion issue.