Perl Brasil

Pesquisar

Documentação

Artigos

Planeta

Eventos

Comunidade

r1 - 06 Aug 2006 - JoenioCosta

Como detectar e tratar erros em tempo de execução

Problema

Você quer detectar e tratar erros em tempo de execução, de forma que seu programa não seja interrompido.

Solução

Use eval{} para executar o código; se houver algum erro, ele será capturado na variável de erro $@.

Discussão

Se você executar o código:

    open FILE, "arquivo.txt" or die "Erro: $!";
    my @file = <FILE>;
    close FILE;

O programa poderá terminar de maneira anormal se, por alguma razão, o arquivo não puder ser aberto. Às vezes esta é a melhor opção; mas muitas vezes você poderá querer detectar e tratar o erro, para que o programa não seja interrompido.

Para fazer isso, você pode colocar o código dentro de um eval{}. O código será executado normalmente, mas, se houver algum erro, o programa simplesmente sairá do eval, colocando a mensagem de erro em $@. (A variável $@, também conhecida como $EVAL_ERROR, é a variável que armazena erros gerados dentro de um eval.)

    eval {
        open FILE, "arquivo.txt" or die "Erro: $!";
        my @file = <FILE>;
        close FILE;
    };

    if ($@) {
        warn "Erro: $@";
    }

    # o programa continua normalmente

Observe que existe um ponto-e-vírgula após o fechamento do eval{}, pois o eval é um comando comum de perl. Poderíamos ter usado qualquer outro tipo de delimitadores, como "", '', qw{}, e em todos os casos precisamos de um ponto-e-vírgula depois do eval:

    while (1) {
        print "Digite uma expressão perl: ";
        $expr = <>;
        eval "$expr";
        print "Erro: $@" if defined $@;
    }

Neste outro exemplo experimente digitar comandos como "print 2+2", "exit" ou "die".

Dessa forma, temos a chance de detectar e tratar o erro, ao invés de simplesmente deixar o programa morrer.

Comentários