I was talking about
prince. Since (as OP found out)
Jenkins had cleared PATH environment variable, and (supposedly) there was no
prince executable in the current directory (or the script was running on a UNIX-like system where executables are not run from current directory unless
$PATH contains
.), OP thought that
open($fh, "|-", "prince ...") should have failed, but it didn't because there was a
$Config{sh} between Perl and prince in the process tree.