Chapter 7. When Things Go Wrong

Perl 6 doesn’t always immediately give up when something goes wrong. It can fail softly. If the result of that problem doesn’t affect anything else in the program there’s no need to complain about it. However, the moment it becomes a problem that passive failure demands your attention.

This chapter shows you the error mechanisms and how to deal with them. You’ll see how to handle the problems that your program notices on your behalf as well as detect and report problems on your own.

Exceptions

Here’s a bit of code that tries to convert nonnumeric text into a number. Maybe something else didn’t put the right value in the variable:

my $m = 'Hello';
my $value = +$m;
put 'Hello there!';  # no error, so, works?

Your program doesn’t complain because you don’t do anything with the problematic result. Change the program to output the result of what you think was a numeric conversion:

my $m = 'Hello';
my $value = +$m;
put $value;

Now you get some error output instead:

Cannot convert string to number: base-10 number must
begin with valid digits or '.' in '⏏Hello' (indicated by ⏏)
    in block <unit> at ... line 2

Actually thrown at:
    in block <unit> at ... line 3

Look at that error message. It reports two line numbers. The error occurred on line 2, but it wasn’t until line 3 (the one with put) that it became a problem. That’s the soft failure. What’s actually in $value? It’s a Failure object:

my $m = 'Hello'; my $value = +$m; put "type is {$value.^name}"; # type is Failure ...

Get Learning Perl 6 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.