in reply to Perl Term::ReadLine::Gnu Signal Handling Difficulties

You access GNU Readline variables through the Attribs method (with the rl_ stripped). Term::ReadLine::Gnu_Variables

#!/usr/bin/perl use strict; use warnings; use Term::ReadLine; $SIG{TERM} = sub { print "I got a TERM\n"; exit; }; $SIG{INT} = sub { print "I got a INT\n"; exit; }; # add any additional signal handlers you want my $term = Term::ReadLine->new('Term1'); $term->ornaments(0); my $attribs = $term->Attribs; $attribs->{catch_signals} = 0; # the default is 1 my $prompt = 'cmd> '; while ( defined (my $cmd = $term->readline($prompt)) ) { chomp($cmd); if ($cmd =~ /^help$/) { print "Help Menu\n"; } else { print "Nothing\n"; } }

Update: Added $SIG{INT}

Replies are listed 'Best First'.
Re^2: Perl Term::ReadLine::Gnu Signal Handling Difficulties
by sgt_b2002 (Initiate) on Nov 13, 2012 at 13:50 UTC

    Hi Mr. Muskrat

    Thanks for the help. I tried the script you provided and can see how to set the Gnu variables now, but my script still doesn't act how I think it should.

    Given the script you provided, I'll hit control-c to send an INT to the script while at the prompt. I expect to see "I got a INT" right after I hit control-c. Instead, the script stays at the prompt until I hit enter. After hitting enter I see "I got a INT".

    Is this the designed behavior? Ideally, I'd like to have the signal handlers trigger as soon as the signal is received.

    Thanks again for helping me out. :)

      It works for me; that is to say that when I run it and press ctrl-c, it exits with "I got a INT".

      We are going to need more information about the environment where you are testing this. Let's start with operating system, version of Perl, version of Term::ReadLine::Gnu and version of GNU Readline library version should be sufficient for now.

      By the way, it's impolite to cross-post without saying you've cross-posted.

        Thanks again for the reply. I'll be sure to mention cross positing if it happens again as well.

        So I've tested this in two environments and in each, the ctrl-c isn't handled until I press enter. Here are the two environments.

        OS: Gentoo Linux 2.6.35 x86_64 Perl: 5.12.4 Term::ReadLine::Gnu: 1.20 readline version: 6.2_p1 OS: Gentoo Linux 3.3.8 x86_64 Perl: 5.16.1 Term::ReadLine::Gnu: 1.20 readline version: 6.2_p1

        As an aside, I added the following line as a quick check to make sure I'm using Term::ReadLine::Gnu when testing this on different machines.

        print $term->ReadLine."\n";

        Again, thanks for your help with this. :)