From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

=head1 Name
SPVM::Document::Language::ExceptionHandling - Exception Handling in the SPVM Language
=head1 Description
This document describes exception handling in the SPVM language.
=head1 Exception Handling
=head2 Throwing Exception
The L<die statement|SPVM::Document::Language::Statements/"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 C<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 L<Error|SPVM::Error> class.
=head2 Catching Exception
An eval block catches an exception.
eval {
die "This value is invalid.";
}
C<undef> is set to L<$@|/"Exception Variable"> at the beginning of each eval block.
0 is set to C<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 L<$@|/"Exception Variable">, and the basic type ID passed to the die statement is set to C<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) {
}
}
C<$@> could be overwritten by the other operations, so it is good to save it into a local variable.
if (my $error = $@) {
}
=head2 Exception Variable
C<$@> is the exception variable. This is used to save a message for an exception.
$@
The type is 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.
=head1 See Also
=over 2
=item * L<SPVM::Document::Language::Statements>
=item * L<SPVM::Document::Language::Operators>
=item * L<SPVM::Document::Language>
=item * L<SPVM::Document>
=back
=head1 Copyright & License
Copyright (c) 2023 Yuki Kimoto
MIT License