alarm comes from UNIX, and is based on a UNIX specific architechture, i.e. signals.
alarm does not work on the Activestate implementation of Perl on Windows, and that is well documented: in the ActiveState documentation "Windows quirks"
Why doesn't signal handling work on Windows?".
There are also several nodes here:
alarm not triggering SIGALRM on Windows 2003,
Timeouts: Any alternative to alarm in Win32?,
Re^2: alarm() on windows 2003, overview,
Timeouts/timers on Win32 system. As
perlport says "Don't count on signals or %SIG for anything.".
Some signals
are implemented in the Microsoft C compilers, but only the absolute minimum to conform to the ANSI C standard. Those signals supported do not include SIGALRM.
Windows does have a rich timer API based around Waitable Timers, designed to be called from C/C++. See
http://msdn.microsoft.com/en-us/library/ms687012(v=vs.85).aspx.