I found out why alarm/SIGALRM wasn't working.  Safe signals!  I needed to add a signal check to MacPerl's PERL_ASYNC_CHECK ... essentially just a if (PL_sig_pending) { despatch_signals() }.  The signals were never being raised.  I was about to define PERL_OLD_SIGNALS when I looked around and saw its mention in mg.c:Perl_csighandler, and followed the trail to Perl_raise_signal and beyond.