5

我正在使用Try::Tinytry-catch。

代码如下:

use Try::Tiny;

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

somefunction();

...

sub somefunction {
    print "somefunction";
}

当我执行它是这样的:

somefunction
In Try
In catch

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

4

2 回答 2

20

就像忘记一个分号一样

print
somefunction();

导致输出somefunction传递给print而不是$_,缺少分号导致输出somefunction作为参数传递给catch

try {
   ...
}
catch {
   ...
};      <--------- missing
somefunction();

try并且catch&@原型的子程序。这意味着

try { ... } LIST
catch { ... } LIST

是相同的

&try(sub { ... }, LIST)
&catch(sub { ... }, LIST)

所以你的代码是一样的

&try(sub { ... }, &catch(sub { ... }, somefunction()));

catch如您所见,块后缺少的分号导致somefunction在之前被调用catch(它返回一个告诉try异常时要做什么的对象)和try.

代码应该是

&try(sub { ... }, &catch(sub { ... })); somefunction();

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

于 2012-09-17T15:33:54.327 回答
2

你期望什么顺序?你的代码真的错过了catch代码后面的分号吗?

于 2012-09-17T15:11:32.220 回答