2016-01-15 3 views
1

У меня есть блок try-catch (из модуля TryCatch) в моем скрипте, и я хочу напечатать сообщение об ошибке из блока try в блоке catch. Похоже, что переменная ошибки является локальным для try блока:Как я могу напечатать сообщение об ошибке из блока try в блоке catch с помощью TryCatch.pm?

use TryCatch; 
... 
try { 
     some command; 
    } 
    catch { 
     print "some command failed due to: [email protected]"; 
     # error variable [email protected] is not visible here 
     return; 
    } 

Есть ли другой способ сделать это?

+3

Если вы используете Try :: Tiny, в блоке 'catch {}' ошибка будет найдена в '$ _'. – DavidO

+0

Try :: Catch делает это так же: '$ _', а TryCatch предоставляет' $ @ '(за свои документы) – DavidO

+4

@DavidO Документы TryCatch ошибочны в отношении' $ @ ', см. [Этот билет] (https: //rt.cpan.org/Public/Bug/Display.html?id=49072). Исходя из количества незафиксированных проблем, вместо этого я использовал Try :: Tiny. – ThisSuitIsBlackNot

ответ

4

Согласно documentation, код, который вы показали, должен работать. Тем не менее, есть longstanding bug, который приводит к сбою.

Вы можете получить вокруг него, используя подпись в catch блоке:

use strict; 
use warnings; 
use 5.010; 

use TryCatch; 

try { 
    die 'foo'; 
} 
catch ($err) { 
    say "Caught $err"; 
} 

Выход:

Caught foo at ./bar line 10. 

Однако, основываясь на количестве outstanding bugs, я бы рекомендовал использовать Try::Tiny вместо.

Смежные вопросы