Wed Jul 14 20:00:48 2010: Request 59322 was acted upon. Transaction: Correspondence added by dbec...@roadrunner.com Queue: Win32-Console Subject: Re: [rt.cpan.org #59322] SetConsoleCtrlHandler function not supported Broken in: 0.09 Severity: Important Owner: Nobody Requestors: c...@cpan.org Status: new Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=59322 >
Chris Marshall via RT wrote: > Tue Jul 13 12:59:28 2010: Request 59322 was acted upon. > Transaction: Ticket created by CHM > Queue: Win32-Console > Subject: SetConsoleCtrlHandler function not supported > Broken in: 0.09 > Severity: Important > Owner: Nobody > Requestors: c...@cpan.org > Status: new > Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=59322 > > > A persistent and pernicious problem with using perl > from the win32 console is the fact that Ctrl-C can > not be caught. This makes it very difficult to implement > cross-platform code that works on win32. > > If SetConsoleCtrlHandler() were available to handle > these "signals" that would prevent Ctrl-C in a > Term::ReadLine::Perl session in a CMD shell window > from killing the perl instance and even the CMD > shell if the exit routine query is not answered > in the negative. > > I notice that there is commented out code for just > this in the 0.09 version of Win32::Console. Is > there a reason it was not enabled? Even a limited > implementation that keeps perl and the CMD shell > from exiting would be a huge win. Can't you already trap Ctrl-C in the script ? What happens when you run this ? : test.pl: my $cnt = 0; sub handler { print "Caught a SIG '$_[0]'\n"; exit if ++$cnt > 2; } $SIG{INT} = \&handler; while (1) { Win32::Sleep(100); } __END__ > perl test.pl ^C (type Ctrl-C) Caught a SIG 'INT' ^C Caught a SIG 'INT' ^C Caught a SIG 'INT' Should catch Ctrl-C, print the message and exit after the 3rd time. Not sure if changing the sleep to your readline call would alter the result - try changing it.