Try::Tiny: Странное поведение с try-catch или нет?
Я использую Try::Tiny
для попробовать-поймать.
Код выглядит так:
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 ответа
Так же, как забыть точку с запятой в
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.
Какую последовательность вы ожидаете? Ваш код действительно пропускает точку с запятой после catch
код?