В Perl ошибка, произошедшая во внутреннем eval {}, также может быть перехвачена внешним eval {}? - PullRequest
0 голосов
/ 06 июля 2011

не совсем понятно об этой функции.

Ситуация такова, что у нас есть API, который имеет свой собственный eval catch, обычно он возвращает статус. мы используем этот API и нам нужен определенный статус выполнения, идея состоит в том, чтобы сделать внешний eval, чтобы отследить любую ошибку, вызванную API. Является ли это возможным ? или это игнорируется внутренним Eval.

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Если API «выдает» ошибку с die, когда он «перехватывает» ошибку, тогда да, ваш внешний eval может «перехватить» его и обработать так, как он хочет.Если API перехватывает и просто возвращает код ошибки, скажем, как возвращаемое значение, тогда вам не нужен внешний eval.Более конкретный пример может помочь ...

0 голосов
/ 06 июля 2011

Будет работать, зацените этот пример ...

use strict;
use warnings;

eval { api_function(); };

if ($@) {
    warn "Oops! API error!";
}

sub api_function {

    eval {
        my $a = 1;

        my $x = 1 / $a;
    };

    if ($@) {
        warn "Oops! error!";
    }

    my $a = 0;

    my $x = 1 / $a;
}
...