Excepções em Perl

2011-02-06, por Alberto Simões ambs@cpan.org

Newbie Icon

Até há relativamente pouco tempo, a falta de tratamento adequado de erros e excepções era uma razão para muitos programadores Perl o abandonarem noutras direcções. Na verdade, não é simpático que determinado código ao falhar retorne apenas um valor indefenido (undef) sem indicar claramente qual o erro ocorrido.

Desde 2009 (pelo menos), que está disponível um pequeno módulo, chamado Try::Tiny,  que torna muito simples a implementação de código com excepções. Simples, e intuitiva.

Então, qual a filosofia? Quando determinada função ou bloco de código falha deve invocar a função die com a mensagem de erro em causa. Este die vai ser entendido pelo Try::Tiny como o levantamento da excepção, e que poderá ser apanhado com um bloco try, como vamos ver no exemplo abaixo.

Considerem uma função que realiza uma divisão de dois valores:

              sub divide {
                    my ($dividendo, $divisor) = @;
                    if ($divisor == 0) {
                           die "Erro! Divisão por zero!";
                    } else {
                           return $dividendo / $divisor;
                    }
             }

Quando o divisor for o valor zero um erro é despoletado. Sem o uso do Try::Tiny o código apresentado iria abordar todas as execuções em que se tentase realizar a divisão por zero. Mas, com este módulo, podemos apanhar essa excepção:

           use Try::Tiny;

           try {
              my $resultado = divide(10, 0);
              print "O resultado da divisão é: $resultado";
           } catch {
              print "Ocorreu um erro: $
";          
           };

Este módulo permite mais algumas brincadeiras que veremos num post seguinte.

Enhanced by Zemanta