我正在使用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
输出序列对我来说不对。这是错的吗?或这是正常行为吗?
答案 0 :(得分:16)
就像在
中忘记分号一样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调用之后放置一个分号来实现的。
答案 1 :(得分:2)
您期望什么序列?在catch
代码后,您的代码是否真的错过了分号?