If the true branch of the form is evaluated, the variables A
and B become defined, whereas in the false branch only B
is defined.

Whether or not this an error depends upon what happens after the
case function. In this example it is an error, a future reference is
made to A in the call h(A) - if the false branch
of the case form had been evaluated then A would have been undefined.

The module error_handler is called when an undefined function is
called.

If a call is made to Mod:Func(Arg0,...,ArgN) and no code
exists for this function thenundefined_call(Mod, Func,[Arg0,...,ArgN])
in the module error_handler will be called.
The code in error_handler is almost like this:

By evaluating process_flag(error_handler, MyMod) the user
can define a private error handler. In this case the
function:MyMod:undefined_function will be called instead
oferror_handler:undefined_function.

Erlang references are unique, the system guarantees that no two
references created by different calls to make_ref will ever
match. The guarantee is not 100% - but differs from 100% by an
insignificantly small amount :-).

References can be used for writing a safe remote procedure call
interface,
for example: