@@ -408,15 +408,18 @@ ###################################################################### my $old; my $term = new Term::ReadLine 'pmchat'; +use POSIX qw/SIGALRM/; + +my $posixsigh=sub { + $old = $readline::line; + die +}; sub getlineUnix { my $message; eval { - local $SIG{ALRM}=sub { - $old = $readline::line; - die - }; + POSIX::sigaction(SIGALRM, POSIX::SigAction->new($posixsigh)); ## I don't use the version of readline from ReadKey (that includes ## a timeout) because this version stores the interrupted (what @@ -427,8 +430,11 @@ $message = $term->readline("\rTalk: ", $old); $old = $readline::line = ''; alarm(0) unless $win32; + POSIX::sigaction(SIGALRM, POSIX::SigAction->new(undef)); }; + $message="" if not defined $message; + #warn "seen: $message\n"; $message; }