Abstraction on a file descriptor, to interact with the content of a file.

var a = File("existing_file.txt").open_r      # open file for reading
var b = File("new_file.txt").open_w           # open file for writing

Some useful methods on FileHandle objects:

fh.autoflush(bool)      # enable/disable auto-flush mode
fh.binmode(encoding)    # set encoding
fh.line                 # read one line as a String
fh.slurp                # read the entire file as a String
fh.lines                # read the entire file as an Array of String objects
fh.grep { ... }         # collect only the lines that match the block
fh.grep(/regex/)        # collect only the lines that match the regex
fh.each { ... }         # iterate over each line
fh.eof                  # true when at the end of the file
fh.tell                 # current position in the file,whence)     # jump to this position in the file
fh.lock                 # lock the filehandle
fh.unlock               # unlock the filehandle
fh.say(str)             # write a string into the file (appending "\n")
fh.print(str)           # write a string into the file (without appending "\n")
fh.close                # close the filehandle

The special FileHandle type can be for checking if a given object is really a FileHandle object:

fh.kind_of(FileHandle)    # true if `fh` is a FileHandle object

The file object to which a FileHandle refers, if any, can be obtained with fh.file, which may be nil or a File object.