in reply to Signals, SA_RESTART, and EINTR

I assume you're running a recent Perl, with safe signals. That means that Perl will act on a signal only between perlops, not during.(Why? Because signals which arrive while perl is busy during a perlop could cause mayhem - perl's internals could be in an inconsistent state, so a complicated handler could easily cause a crash. The usual cure was to keep signal handlers very, very simple, but it still wasn't a 100% assurance.)

A sysread is a very long op, and you just instructed it NOT to exit when it receives a signal, but to restart, instead. Since it restarts (and doesn't return, yet), Perl can not process the signal - since it is still inside the sysread perlop.