3 perl cpan exception-handling try-catch weak-typing
我正在使用Try::Tinytry-catch.
代码如下:
use Try::Tiny;
try {
print "In try";
wrongsubroutine(); # undefined subroutine
}
catch {
print "In catch";
}
somefunction();
Run Code Online (Sandbox Code Playgroud)
...
sub somefunction {
print "somefunction";
}
Run Code Online (Sandbox Code Playgroud)
当我执行时它是这样的:
somefunction
In Try
In catch
Run Code Online (Sandbox Code Playgroud)
输出序列对我来说是错误的.这是错的吗?或这是正常的行为吗?
ike*_*ami 18
就像忘记分叉一样
print
somefunction();
Run Code Online (Sandbox Code Playgroud)
导致输出somefunction传递给print而不是$_,缺少的分号导致输出somefunction作为参数传递给catch.
try {
...
}
catch {
...
}; <--------- missing
somefunction();
Run Code Online (Sandbox Code Playgroud)
try并且catch是&@原型的子程序.这意味着
try { ... } LIST
catch { ... } LIST
Run Code Online (Sandbox Code Playgroud)
是相同的
&try(sub { ... }, LIST)
&catch(sub { ... }, LIST)
Run Code Online (Sandbox Code Playgroud)
所以你的代码是一样的
&try(sub { ... }, &catch(sub { ... }, somefunction()));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在catch块之后丢失的分号导致somefunction之前被调用catch(返回一个对象,该对象告诉try如何对异常执行操作)和try.
代码应该是
&try(sub { ... }, &catch(sub { ... })); somefunction();
Run Code Online (Sandbox Code Playgroud)
这是通过在try-catch调用后放置一个分号来实现的.