Aiui ваш вопрос:
Я ищу use autodie qw(:all)
& use warnings 'FATAL' => 'all'
в Perl6
Эквивалент autodie
в P6
Aiui use autodie qw(:all)
в P5 становится use fatal;
в P6. Это лексически ограниченный эффект.
Раздел autodie
в руководстве по скорлупе от P5 к P6 объясняет, что процедуры теперь возвращают Failure
с, чтобы указать на ошибки.
Прагма fatal
позволяет возвращать Failure
из подпрограммы, автоматически генерирует исключение, содержащее Failure
. Если вы не предоставите код, который их перехватит, эти исключения, включающие Failure
s, автоматически исчезнут.
Эквивалент use warnings 'FATAL'
в P6
Aiui use warnings 'FATAL' => 'all'
в P5 становится CONTROL { when CX::Warn { note $_; exit 1 } }
в P6. Это эффект лексической области действия.
CONTROL
исключения объясняет, как они работают.
CONTROL
исключения - это подмножество всех исключений, которые .resume
'd по умолчанию - программа остается в живых по умолчанию, когда они выбрасываются.
Код P6, который я предоставил (который взят из Как я могу сделать все предупреждения фатальными? , на который вы ссылались), вместо этого CONTROL
исключений умирает (из-за exit
рутина).
Возвращаясь к вашему текущему вопросу:
say %key<fake_key>; # (Any)
Я хочу, чтобы программа умерла в таких случаях ...
Используйте либо ответ Jonathan ++ (используйте put
, который, в отличие от say
, не пытается сохранить вашу программу живым), либо ответ KeyRequired
Scimon ++, который сделает доступ к несуществующему ключу фатальным.
... как это делает Perl5 ...
Только если вы используете use warnings 'FATAL' ...
, так же, как P6, если вы используете эквивалент.
... потому что это означает, что важные данные отсутствуют.
Часто это означает, что неважные данные отсутствуют, или даже важные данные, которые вы не хотите, определяли в течение некоторого времени, когда вы пытаетесь получить к нему доступ, поэтому Perls по умолчанию поддерживает вашу программу живой и требует, чтобы вы сообщали ей, что хотите, если Вы хотите что-то другое.
Вы можете использовать вышеупомянутые конструкции, чтобы получить точный желаемый результат, и они будут ограничены определенной переменной (если вы используете роль KeyRequired
) или оператором (используя put
вместо say
) или лексическая область (с использованием прагмы или блока CONTROL
).