Perl-Try-Tiny-模块

基本示例

try

此时, 其作用和 eval 类似:

1
2
3
try {
die "foo";
}

try...catch

try 之中为可能有错误的代码, catch 中为对错误的处理程序.

1
2
3
4
5
try {
die "foo";
} catch {
warn "caught error: $_"; # not $@
};

try...catch...finally

可以给 try 块加上多个 finally 块, 但似乎只有第一个起作用.

一般 finally 块用于 cleanup 工作, 如关掉文件句柄.

1
2
3
my $x;
try { die 'foo' } finally { $x = 'bar' };
try { die 'foo' } catch { warn "Got a die: $_" } finally { $x = 'bar' };

知识点

try 块正常运行, 则和普通快一样, 返回其最后一条语句的结果.

如果 try 块 dies, 其返回值为 catch 块最后一条语句的结果, 如果没有 catch 块, 则在标量上下文中返回 undef, 在列表上下文中返回空列表.

@_ (函数参数) 在 try 块中将不起作用, 可以用引用解决:

1
2
3
4
5
sub bar_in_place {
my $self = shift;
my $args = \@_;
try { $_ = $self->bar($_) for @$args}
}

catch 块中可以用 return 语句来返回值.

注意错误信息在 $_ 中.

注意 , try...catch 块最后需要分号 ; 不然无法执行.


Perl-Try-Tiny-模块
http://example.com/2023/04/27/Perl-Try-Tiny-模块/
作者
Jie
发布于
2023年4月27日
许可协议