getc FILEHANDLE
getc
This function returns the next byte from the input file attached
to FILEHANDLE
. At end-of-file, it returns a null string. If
FILEHANDLE
is
omitted, the function reads from STDIN
. This operator is
very slow, but is occasionally useful for single-character,
buffered input from the keyboard. This does not enable single-character
input. For unbuffered input, you have
to be slightly more clever, in an operating-system-dependent fashion.
Under UNIX you might say this:
if ($BSD_STYLE) { system "stty cbreak </dev/tty >/dev/tty 2>&1"; } else { system "stty", "-icanon", "eol", "\001"; } $key = getc; if ($BSD_STYLE) { system "stty -cbreak </dev/tty >/dev/tty 2>&1"; } else { system "stty", "icanon", "eol", "^@"; # ASCII NUL } print "\n";
This code puts the next character typed on the terminal in the string
$key
. If your stty program has options like cbreak
,
you'll need to use the code where $BSD_STYLE
is true,
otherwise, you'll need to use the code where it is false. Determining
the options for stty is left as an exercise to the reader.
The POSIX module in Chapter 7 provides a more portable version of
this using the POSIX::getattr()
function.
See also the TERM::ReadKey module from your nearest CPAN site.