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$_somefunctioncatch

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

trycatch&@プロトタイプのサブルーチンです。つまり、

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

と同じです

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

したがって、コードはと同じです

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

catchご覧のとおり、ブロックの後に欠落しているセミコロンsomefunctionが前に呼び出されています(これは例外で何をすべきかをcatch指示するオブジェクトを返します) 。trytry

コードは次のようになります

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

これは、try-catch呼び出しの後にセミコロンを配置することで実現されます。

于 2012-09-17T15:33:54.327 に答える
2

どのようなシーケンスを期待しますか?あなたのコードは本当にコードの後のセミコロンを見逃していcatchますか?

于 2012-09-17T15:11:32.220 に答える