Я обнаружил, что сценарий, заданный @ijw (изменен так, как показано ниже), не работает в Active State Perl версии v5.10.1:
This is perl, v5.10.1 built for MSWin32-x86-multi-thread
(with 2 registered patches, see perl -V for more detail)
Моя модификация ниже добавляет вызовы автозапускатак как в противном случае спящий режим ниже не будет отображать вывод оператора print во время сна):
#!/usr/bin/perl
use IO;
use strict;
use warnings;
# Set autoflushing on to stdout and stderr. Otherwise, system() call and stdout output does not show up in proper sequence,
# especially on Windows:
STDOUT->autoflush(1);
STDERR->autoflush(1);
$SIG{INT}=\&clean;
sub clean {
print "caught\n";
exit (0);
}
print "before sleep\n";
sleep 100;
print "after sleep and then exiting\n";
exit (0);
Когда я закомментировал следующие строки в этом скрипте выше:
$SIG{INT}=\&clean;
sub clean {
print "caught\n";
exit (0);
}
И затемнажимая CTRL-C во время сна, скрипт завершает работу и показывает это сообщение:
Terminating on signal SIGINT(2)
Следовательно, на самом деле оно должно быть истинным (ну, для ActiveState Perl v5.10.1), что man perlwin32
сообщает:
... большинство реализаций «signal ()» в Win32 серьезно ограничены....
Для дальнейшего использования:
- perlmonks относится к использованию Win32 :: API для настройкивызов функции
SetConsoleCtrlHandler
Win32. - Все о SetConsoleCtrlHandler .