尝试:: Tiny:使用try-catch或Not的奇怪行为?

时间:2012-09-17 15:05:49

标签: perl exception-handling try-catch cpan weak-typing

我正在使用Try::Tiny进行try-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

输出序列对我来说不对。这是错的吗?或这是正常行为吗?

2 个答案:

答案 0 :(得分:16)

就像在

中忘记分号一样
print
somefunction();

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

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

trycatch&@原型的子程序。这意味着

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

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

所以你的代码与

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

正如您所看到的,catch块之后缺少的分号导致somefunctioncatch之前被调用(它返回一个告诉try的对象是什么做例外)和try

代码应为

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

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

答案 1 :(得分:2)

您期望什么序列?在catch代码后,您的代码是否真的错过了分号?