Documentation for routine getc
assembled from the following pages:
Class: IO::CatHandle §
From IO::CatHandle
(IO::CatHandle) method getc §
Defined as:
method getc(IO::CatHandle: --> Bool)
Returns a single character of input from the handle. All the caveats described in IO::Handle.getc
apply. Returns Nil
when there is no more input. It is an error to call this method when the handle is in binary mode, resulting in X::IO::BinaryMode
exception being thrown.
(my = 'foo'.IO).spurt: 'I ♥ Raku';(my = 'bar'.IO).spurt: 'meow';my = IO::CatHandle.new: , ;.say while = .getc; # OUTPUT: «I ♥ Rakumeow»
Class: IO::Handle §
From IO::Handle
(IO::Handle) routine getc §
Defined as:
method getc(IO::Handle: --> Str)multi sub getc (IO::Handle = --> Str)
Reads a single character from the input stream. Attempting to call this method when the handle is in binary mode will result in X::IO::BinaryMode
exception being thrown. The subroutine form defaults to $*ARGFILES
if no handle is given. Returns Nil
, if no more input is available, otherwise operation will block, waiting for at least one character to be available; these caveats apply:
Buffering terminals §
Using getc to get a single keypress from a terminal will only work properly if you've set the terminal to "unbuffered". Otherwise the terminal will wait for the return key to be struck or the buffer to be filled up before perl6 gets even a single byte of data.
Waiting for potential combiners §
If your handle's encoding allows combining characters to be read, raku will wait for more data to be available before it provides a character. This means that inputting an "e" followed by a combining acute will give you an e with an acute rather than giving an "e" and letting the next reading function give you a dangling combiner. However, it also means that when the user inputs just an "e" and has no intention to also input a combining acute, your program will be waiting for another keypress before the initial "e" is returned.