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.