Combined from primary sources listed below.
See primary docmentation in context for method close.
method close(IO::Pipe: --> Proc:D)
Closes the pipe and returns Proc object from which the pipe originates.
See primary docmentation in context for routine close.
method close(IO::Handle:D: --> Bool:D)
multi close(IO::Handle $fh)
Closes an open filehandle, returning True on success. No error is thrown if the filehandle is already closed, although if you close one of the standard filehandles (by default: $*IN, $*OUT, or $*ERR: any handle with native-descriptor 2 or lower), you won't be able to re-open them.
given "foo/bar".IO.open(:w) {
.spurt: "I ♥ Raku!";
.close;
}
It's a common idiom to use LEAVE phaser for closing the handles, which ensures the handle is closed regardless of how the block is left.
do {
my $fh = open "path-to-file";
LEAVE close $fh;
# ... do stuff with the file
}
sub do-stuff-with-the-file (IO $path-to-file) {
my $fh = $path-to-file.open;
# stick a `try` on it, since this will get run even when the sub is
# called with wrong arguments, in which case the `$fh` will be an `Any`
LEAVE try close $fh;
# ... do stuff with the file
}
Note: unlike some other languages, Raku does not use reference counting, and so the filehandles are NOT closed when they go out of scope. While they will get closed when garbage collected, garbage collection isn't guaranteed to get run. This means you must use an explicit close on handles opened for writing, to avoid data loss, and an explicit close is recommended on handles opened for reading as well, so that your program does not open too many files at the same time, triggering exceptions on further open calls.
Note several methods allow for providing :close argument, to close the handle after the operation invoked by the method completes. As a simpler alternative, the IO::Path type provides many reading and writing methods that let you work with files without dealing with filehandles directly.
See primary docmentation in context for method close.
See primary docmentation in context for method close.
method close(IO::Socket::Async:D: )
Close the connected client IO::Socket::Async which will have been obtained from the listen Supply or the connect Promise.
In order to close the underlying listening socket created by listen you can close the IO::Socket::Async::ListenSocket. See listen for examples.
See primary docmentation in context for method close.
method close(IO::CatHandle:D: --> True)
Closes the currently active source handle, as well as any already-open source handles, and empties the source handle queue. Unlike a regular IO::Handle, an explicit call to .close is often not necessary on an IO::CatHandle, as merely exhausting all the input closes all the handles that need to be closed.
with IO::CatHandle.new: @bunch-of-handles {
say .readchars: 42;
.close; # we are done; close all the open handles
}