           IO.puts "Invalid argument given"
       catch
         value ->
-          IO.puts "caught \#{value}"
+          IO.puts "caught #{value}"
       else
         value ->
-          IO.puts "Success! The result was \#{value}"
+          IO.puts "Success! The result was #{value}"
       after
         IO.puts "This is printed regardless if it failed or succeed"
       end

  """
  defmacro case(condition, blocks)

  @doc """
  Evaluate the given expressions and handle any error, exit
  or throw that may have happened.


        x -> nil
      end

  ## Erlang errors

  Erlang errors are transformed into Elixir ones during rescue:

      try do
        :erlang.error(:badarg)
      rescue
        ArgumentError -> :ok
      end

  The most common Erlang errors will be transformed into their
  Elixir counter-part. Those which are not will be transformed
  into `ErlangError`:

      try do
        :erlang.error(:unknown)
      rescue
        ErlangError -> :ok
      end

  In fact, ErlangError can be used to rescue any error that is
  not an Elixir error proper. For example, it can be used to rescue
  the earlier `:badarg` error too, prior to transformation:

      try do
        :erlang.error(:badarg)
      rescue
        ErlangError -> :ok
      end

  ## Catching throws and exits

  The catch clause can be used to catch throws values and exits.

      try do
        exit(1)
