If the given name does not exist and neither default nor a
block a provided an IndexError is raised. If
a block is given it is called with the missing name to provide a value. If
a default value is given it will be returned when no block is given.

Adds the contents of hash to the environment variables. If no
block is specified entries with duplicate keys are overwritten, otherwise
the value of each duplicate name is determined by calling the block with
the key, its value from the environment and its value from the hash.