Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^5: How to pass CTRL-C to child script only

by spazm (Monk)
on Aug 24, 2010 at 03:04 UTC ( #856842=note: print w/ replies, xml ) Need Help??

in reply to Re^4: How to pass CTRL-C to child script only
in thread How to pass CTRL-C to child script only

I'm just use ing the CQLogin module in script A, so in this case I cannot use kill as there is no separate PID for script B, is that correct?
Yes, that is correct. In the situation you have described there is no child script.

Suggestion 1:
Set interrupt to die, then use eval to trap the die in the code. This modification could be in either the primary module or the CQLogin module, depending on if you want to change the calling contract of the CQLogin.

Suggestion 2:
Use a parsing module that has already anticipated and fixed these issues.

#!/usr/bin/perl use strict; use warnings; my $INTERRUPT_MESSAGE = "caught sig int user interrupt"; $SIG{'INT'} = sub { die $INTERRUPT_MESSAGE }; my $login = new CQLogin(); my $username = eval { $login->autoLogon() }; if ( !defined $username && $@ ) { print STDERR "wow, we got a signal\n\n"; #just for demo purpose die $@ unless $@ eq $INTERRUPT_MESSAGE; } print "Success, our username is [$username]\n\n"; #note, username will be undef if the user interrupted. package CQLogin; sub new { my $class = shift; return bless {}, $class; } sub autoLogon { my $self = shift; chomp( my $username = <STDIN> ); return $username; }

Comment on Re^5: How to pass CTRL-C to child script only
Download Code
Re^6: How to pass CTRL-C to child script only
by spazm (Monk) on Aug 24, 2010 at 17:53 UTC
    I'll explain further if you have any other questions. Please let me know if this works for you.

    The above is tested, working code. It contains an abbreviation of your autoLogon code that I hope is similar to your actual semantics.

    Some modules to consider Term::Readkey or IO::Prompter, to handle this for you.

    Another option is to put the terminal into raw mode and read characters one at a time. Abort upon finding the key currently bound to sig-int (ctrl-c). blech, what a pain that would be.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://856842]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (5)
As of 2014-12-29 00:39 GMT
Find Nodes?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?

    Results (183 votes), past polls