getc
getc - get	the next character from the filehandle
getc FILEHANDLE
getc
Returns the next character from the input file attached to FILEHANDLE,
or a null string at end of file.  If FILEHANDLE is omitted, reads from STDIN.
This is not particularly efficient.  It cannot be used to get unbuffered
single-characters, however.  For that, try something more like:
    if ($BSD_STYLE) {
        system "stty cbreak /dev/tty 2>&1";
    }
    else {
        system "stty", '-icanon', 'eol', "\001"; 
    }
    $key = getc(STDIN);
    if ($BSD_STYLE) {
        system "stty -cbreak /dev/tty 2>&1";
    }
    else {
        system "stty", 'icanon', 'eol', '^@'; # ascii null
    }
    print "\n";
Determination of whether to whether $BSD_STYLE should be set 
is left as an exercise to the reader.  
See also the Term::ReadKey module from your nearest CPAN site;
details on CPAN can be found on CPAN