Thanks to ikegami and salva for their excellent advice.
Having been traumatized writing signal handlers in the presence of non-reentrant system libraries, switching off the signal handler via $SIG{PIPE} = 'IGNORE' is what I would choose ... though I could not restrain myself from using strace on both the calling perl process and the recalcitrant IBM MQ amqsputc, in the hope of understanding what the hell is going on.
BTW, since you share my passion for early Perl Monks history, you might enjoy the sage advice graciously contributed by faq_monk, one of PM's founding users, on Oct 8 1999 - more than two months before the Perl Monks web site opened to the general public!
Update: from perlipc:
The reason for not checking the return value from print() is because of pipe buffering; physical writes are delayed. That won't blow up until the close, and it will blow up with a SIGPIPE. To catch it, you could use this:
$SIG{PIPE} = "IGNORE"; open(my $fh, "|-", "bogus") || die "can't fork: $!"; print $fh "bang\n"; close($fh) || die "can't close: status=$?";
In reply to Re: Detect whether a writeable filehandle has closed? (signal handlers)
by eyepopslikeamosquito
in thread Detect whether a writeable filehandle has closed?
by jdporter
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |