You ask for no special module, but Term::ReadKey would be much easier. That said:
use POSIX;
use strict;
use warnings;
my $FD = fileno(STDIN);
my $TERM = POSIX::Termios->new();
$TERM->getattr($FD);
my $OTERM = $TERM->getlflag();
my $ECHO = ECHO|ECHOK|ICANON;
my $NOECHO = $OTERM&~$ECHO;
select STDOUT;$| = 1;
sub cbreak {
$TERM->setlflag($NOECHO);
$TERM->setcc(VTIME, 1);
$TERM->setattr($FD, TCSANOW);
}
sub cooked {
$TERM->setlflag($OTERM);
$TERM->setcc(VTIME, 0);
$TERM->setattr($FD, TCSANOW);
}
my $key = '';
my $answer = '';
cbreak();
print "How much is A? ";
while(1) {
sysread(STDIN, $key, 1);
last if $key eq "\n";
syswrite(STDOUT,$key);
$answer .= $key
}
syswrite(STDOUT," A:$answer\n");
cooked();
END { cooked() }