В Perl 6 есть понятие soft failure — это исключения, которые проявляются не сразу, а только тогда, когда они уже неизбежны.
Пример 1
Типичный пример такой ситуации — деление на ноль.
my $x = 42; my $y = $x / 0; say 'Okay?';
Запускаем:
$ perl6 div0.pl Okay?
Как видите, хотя мы и попытались разделить на ноль, программа не завершилась с ошибкой и, более того, продолжила работу как ни в чем не бывало.
Однако, если попытаться напечатать значение $y, ошибка проявится.
my $x = 42; my $y = $x / 0; say "\$y = $y";
В этом случае программа завершится с исключением:
$ perl6 div0.pl Attempt to divide 42 by zero using div in block <unit> at div0.pl line 4
Пример 2
Второй пример — открытие несуществующего файла. Вот простейшая программа:
my $f = open 'rubbish-name.txt'; say 'Okay?';
Если ее запустить, ничего страшного не случится:
$ perl6 file0.pl Okay?
Поскольку файлом не попытались воспользоваться, ошибки нет. Если же, например, начать из него читать, то мы сразу остановимся:
$ perl6 file0.pl Failed to open file /Users/ash/rubbish-name.txt: No such file or directory in block <unit> at file0.pl line 1
Это поведение по умолчанию? А сразу выбросить исключение можно?