Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^3: how to check for keyboard input

by chb (Deacon)
on Jul 21, 2005 at 08:07 UTC ( [id://476742]=note: print w/replies, xml ) Need Help??


in reply to Re^2: how to check for keyboard input
in thread how to check for keyboard input

To be extra sure the terminal is in a sane state after the program exits, the safe_exit routine could be hooked in some other places, too, e.g.
$SIG{'INT'} = \&safe_exit; $SIG{'QUIT'} = \&safe_exit; $SIG{__DIE__} = \&safe_exit; END { safe_exit(); }
--- Update: oops, references added, as benizi pointed out below

Replies are listed 'Best First'.
Re: how to check for keyboard input
by benizi (Hermit) on Jul 21, 2005 at 17:17 UTC

    s/&/\\&/g; Otherwise, safe_exit is immediately called. Also, I tend to wrap sub's similar to safe_exit in lexical blocks and prevent them from being called more than once. e.g.

    use Term::ReadKey; { my $called = 0; sub safe_exit { print "safe_exit called $called times before\n"; return if $called++; # disconnect from DB, etc. (things that should only be done on +ce) ReadMode 'normal'; print "Exiting safely\n"; print "exit(@_)\n" if @_; exit @_; } } $SIG{$_} = \&safe_exit for qw/INT QUIT __DIE__/; END { safe_exit(); } ReadMode 'cbreak'; print "Entering loop. Try: kill -INT $$, to see that I exit safely.\nH +it 'x' to see me die.\n"; while (1) { next unless defined(my $key = ReadKey); print "In the loop, got: $key\n"; last if $key eq 'q'; die "with this error message" if $key eq 'x'; }

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (7)
As of 2024-04-24 00:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found