octave: The unwind_protect Statement

 
 10.8 The unwind_protect Statement
 =================================
 
 Octave supports a limited form of exception handling modeled after the
 unwind-protect form of Lisp.
 
    The general form of an ‘unwind_protect’ block looks like this:
 
      unwind_protect
        BODY
      unwind_protect_cleanup
        CLEANUP
      end_unwind_protect
 
 where BODY and CLEANUP are both optional and may contain any Octave
 expressions or commands.  The statements in CLEANUP are guaranteed to be
 executed regardless of how control exits BODY.
 
    This is useful to protect temporary changes to global variables from
 possible errors.  For example, the following code will always restore
 the original value of the global variable ‘frobnosticate’ even if an
 error occurs in the first part of the ‘unwind_protect’ block.
 
      save_frobnosticate = frobnosticate;
      unwind_protect
        frobnosticate = true;
        ...
      unwind_protect_cleanup
        frobnosticate = save_frobnosticate;
      end_unwind_protect
 
 Without ‘unwind_protect’, the value of FROBNOSTICATE would not be
 restored if an error occurs while evaluating the first part of the
 ‘unwind_protect’ block because evaluation would stop at the point of the
 error and the statement to restore the value would not be executed.
 
    In addition to unwind_protect, Octave supports another form of
 exception handling, the ‘try’ block.