Perl6:我怎样才能使所有警告都致命?

Perl6: How could I make all warnings fatal?

我怎样才能使 Perl6 中的所有警告都致命,以便脚本在屏幕上出现警告时立即终止。


CONTROL { when CX::Warn { note $_; exit 1 } } 死得更频繁。

这个脚本死于 CONTROL { when CX::Warn { note $_; exit 1 } } 但没有死于 use fatal:

#!/usr/bin/env perl6
use v6;

my @a = 1 .. 4;
@a[5] = 6;
my @b;

for @a -> $i {
    @b.push( ~$i );
}

say "=====\n" x 3;

您可以使用 'use fatal' 使所有异常立即致命。例如,此代码在您尝试从 $file 中读取之前不会抛出错误,因此它将到达 'say' 行。如果取消注释 'use fatal',它会在 'open' 语句处立即死亡,而不会到达 'say' 行。

有关更多 fine-grained 控制,请参阅 try/CATCH 系统以了解例外情况。

# use fatal;
my $file = open 'nonexistent', :r;
say 'Reached here';
my @lines = $file.IO.lines;

警告是 CX::Warn 类型的控制异常,默认情况下会恢复。如果你想改变这种行为,你需要添加一个 CONTROL 块,在你的情况下是这样的:

CONTROL {
    when CX::Warn {
        note $_;
        exit 1;
    }
}

忽略所有警告而不是将它们设为致命警告如下所示:

CONTROL {
    when CX::Warn { .resume }
}