The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Name

SPVM::Document::Language::ExceptionHandling - Exception Handling in The SPVM Language

Description

This document describes exception handling in the SPVM language.

Exception Handling

Throwing Exception

The die statement throws an exception.

  die "This value is invalid.";

A basic type ID can be given to the die statement. This is set to eval_error_id if an exception is thrown.

  die basic_type_id Error::System, "This value is invalid.";

A class name can be given to the die statement. This is the same as the above code.

  die Error::System "This value is invalid.";

If a basic type ID and a class name are not given, it is set to the basic type ID of the Error class.

Catching Exception

An eval block catches an exception.

  eval {
    die "This value is invalid.";
  }

undef is set to $@ at the beginning of each eval block.

0 is set to eval_error_id at the beginning of each eval block.

If an exception is thrown, the message passed to the die statement is set to $@, and the basic type ID passed to the die statement is set to eval_error_id.

  if ($@) {
    # Do something if an exception is thrwon
  }
  
  # If you need to check eval_error_id, write the following code.
  if ($@) {
    if (eval_error_id isa_error Error::System) {
      
    }
  }

$@ could be overwritten by the other operations, so it is good to save it into a local variable.

  if (my $error = $@) {
    
  }

Exception Variable

$@ is the exception variable. This is used to save a message for an exception.

  $@

The type is the string type.

Using the assignment operator, the value of the exception variable can be set.

  $@ = "Error Message";
  
  $@ = undef;

The exception variable is a stack variable(not a global variable).

If a new stack is created for a thread, exception variables exist for each thread.

See Also

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License