#!/usr/bin/perl
use strict;
use POSIX qw( :termios_h);
my ($term, $term_org, $echo, $noecho, $fd_stdin);
$fd_stdin = fileno( STDIN);
$term = POSIX::Termios->new();
$term->getattr( $fd_stdin);
$term_org = $term->getlflag();
$echo = ECHO | ECHOK | ICANON;
$noecho = $term_org & ~$echo;
sub cbreak
{
$term->setlflag( $noecho);
$term->setcc( VTIME, 1);
$term->setattr( $fd_stdin, TCSANOW);
}
sub nocbreak
{
$term->setlflag( $term_org);
$term->setcc( VTIME, 0);
$term->setattr( $fd_stdin, TCSANOW);
}
sub inkey
{
my $key = -1;
cbreak();
sysread( STDIN, $key, 1);
nocbreak();
return $key;
}
END
{
nocbreak();
}
while(1)
{
print " you typed " . inkey() . "\n";
}