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.