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.
