gpt4 book ai didi

perl - Try::Tiny:try-catch 的奇怪行为与否?

转载 作者:行者123 更新时间:2023-12-01 07:00:48 32 4
gpt4 key购买 nike

我正在使用 Try::Tiny尝试捕捉。

代码如下:

use Try::Tiny;

try {
print "In try";
wrongsubroutine(); # undefined subroutine
}
catch {
print "In catch";
}

somefunction();

...
sub somefunction {
print "somefunction";
}

当我执行
它是这样的:
somefunction
In Try
In catch

输出序列在我看来是错误的。这是错的吗?还是这是正常行为?

最佳答案

就像忘记一个分号一样

print
somefunction();

导致输出 somefunction传递给 print而不是 $_ ,缺少分号导致输出 somefunction作为参数传递给 catch .
try {
...
}
catch {
...
}; <--------- missing
somefunction();
trycatch是带有 &@ 的子程序原型(prototype)。这意味着
try { ... } LIST
catch { ... } LIST

是相同的
&try(sub { ... }, LIST)
&catch(sub { ... }, LIST)

所以你的代码是一样的
&try(sub { ... }, &catch(sub { ... }, somefunction()));

如您所见, catch 后面缺少的分号 block 导致 somefunctioncatch 之前调用(返回一个告诉 try 发生异常时应该做什么的对象)和 try .

代码应该是
&try(sub { ... }, &catch(sub { ... })); somefunction();

这是通过在 try-catch 调用之后放置分号来实现的。

关于perl - Try::Tiny:try-catch 的奇怪行为与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462109/

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