Read a hash from a configuration file. Entries are read by separating each meaningful line at the leftmost occurrence of .separator$. The part on the left will be the key, and what is left on the right will be its value.

The separator string can be longer than a single character. This separator is not passed as an argument, but read from the global workspace. If it does not exist by the time the procedures are included, it is given the default value of “:”.

Lines beginning with a hash character (#), optionally preceeded by whitespace, are considered comments, and ignored.

For versions after 6.0.16, elements found are stored in the .return$[] string hash. For convenience, a separate .return[] hash is provided with the result of calling number() on each corresponding element in .return$[]. For the purposes of generating this numeric hash, corresponding strings like “yes” and “true” are converted to 1, while “no” and “false” are converted to 0.

In versions before 6.0.16, which do not support hashes, or when requested by setting .use_table to true, a Table representation of a hash is used instead, with a single row, and in which each column is named with the key of a different entry. Because this approach means there will be a single hash, boolean strings are not supported when using Tables.