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 SPVM Language

Description

This document describes exception handling in 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.

Copyright & License

Copyright (c) 2023 Yuki Kimoto

MIT License