gpt4 book ai didi

perl - 如何在 Perl 中创建和抛出异常?

转载 作者:行者123 更新时间:2023-12-04 02:26:52 25 4
gpt4 key购买 nike

例如,php 有像 InvalidArgumentException 这样的异常,带有自定义消息“找不到当前组”。
我可以在代码中抛出这个异常。

if ($groupId === 0) {
throw new InvalidArgumentException('Current group not found');
}
我可以继承这个异常并创建另一个子异常。
Perl 中的异常是如何工作的?

最佳答案

有多种方法可以做到这一点,但它们不是直接内置在 Perl 中的。
最简单的就是dieeval {}捕获它。

eval {
die "in a fire";
};
if ($@) {
print "something went wrong";
}
如果你想要 try ,同样有多种选择。最常见的是 Try::Tiny .
use Try::Tiny;

try {
die;
} catch {
print $_;
};
如果你想成为最前沿的人,Paul Evans 进行了一项研究,以获得一个实际的关键字 try进入 Perl 代码。他发布了一个原型(prototype)为 Syntax::Keyword::Try并在最近进行了各种讨论,包括 2021 年的 Fosdem。
现在对于实际的异常(exception)情况,有几种典型的 Perl 方法可以做到这一点。 die可以将对象作为其参数而不仅仅是字符串,因此您几乎可以模仿其他语言的行为。
Throwable可能是我今天会去的。您可以使用 Throwable::Factory 轻松创建大量这些类。 .
use Throwable::Factory
InvalidArgumentException => [qw( $id )];

sub foo {
my $group_id = shift;
unless ($group_id) {
InvalidArgumentException->throw('Current group not found', id => $group_id);
}
}
稍后要捕获它,您可以执行以下操作:
use Try::Tiny;

try {
foo(0);
} catch {
warn $_;
};

关于perl - 如何在 Perl 中创建和抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66831985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com