TedPride has asked for the wisdom of the Perl Monks concerning the following question:

eval { local $SIG{ALRM} = sub { die "Unable to initiate Zip4 connection"; + }; alarm(1); $zip4 = new Win32::DDE::Client('ZP4', 'Addresses'); $SIG{ALRM}->() if $zip4->Error; alarm(0); }; die $@ if $@;
This works just fine when I replace the $zip4 parts of the code with something else, like say sleep(10). However, if the ZP4 application doesn't happen to be running already and ready for connections, it just sits there and hangs rather than dying after 1 second like it's supposed to. Why?