Tratando Exceções com o Perl
Publicado por Daniel Vinciguerra (última atualização em 25/04/2016)
[ Hits: 3.030 ]
Homepage: http://bivee.com.br
O tratamento de exceções é uma parte importante de todo projeto pois isso determina o quão bom e preciso será o feedback do seu sistema para que se detecte mais facilmente um problema.
Como sempre, aqui não tem segredo... existe mais de uma forma de se fazer tratamento de exceções em Perl e tudo vai depender do seu contexto e de como você quer trabalhar com as exceções.
Você pode usar um tratamento nativo, usar algum dos diversos módulos para tratamento de exceções, trata-las como string (default) ou como objetos. No seu projeto você que vai mandar e determinar como você quer fazer as coisas.
Vamos ver neste script algumas formas de se tratar exceções para elucidar como podemos dar nossos primeiros passos para fazer o tratamento de exceções da nossa aplicação.
PRÉ-REQUISITOS
- perl 5.10 ou superior
- Módulo Try::Tiny instalado ($ cpan Try::Tiny)
REFERÊNCIAS
http://perldoc.perl.org/functions/die.html
http://perldoc.perl.org/functions/eval.html
https://metacpan.org/pod/Try::Tiny
EXECUTANDO
$ perl exception.pl
#!/usr/bin/env perl # 2016 (c) Daniel Vinciguerra use 5.10.0; use strict; use warnings; #################################### # Tratanto de Exceções Nativo #################################### show_title("Exceções Nativas"); # try eval { # sacanagem se você tiver um arquivo com esse nome open my $fh, 'zxczxczcz.txt' or die $!; close $fh; }; # catch if (my $ex = $@) { # aqui você pode emitir um aviso ou fazer logging do erro warn "Erro ao tentar abrir o arquivo" if $ex =~ /No such file or directory/; } #################################### # Tratanto de Exceções com Módulo #################################### show_title("Exceções com Modulo"); use Try::Tiny; # try try { # sacanagem se você tiver um arquivo com esse nome open my $fh, 'zxczxczcz.txt' or die $!; close $fh; } catch { # aqui você pode emitir um aviso ou fazer logging do erro warn "Erro ao tentar abrir o arquivo" if /No such file or directory/; }; #################################### # Tratanto de Exceções com OOP #################################### show_title("Exceções com Orientação a Objetos"); # classe básica de exception package Exception { use Scalar::Util qw(blessed); # sobrescreve o uso da variável no contexto de string use overload '""' => sub { $_[0]->to_string }; # construtor sub new { my ($class, $args) = (shift, {@_}); return bless $args || {}, $class; } # die como objeto: Exception->throws('Minha Exception') sub throws { my ($self, $message) = @_; # se não houver uma instância, cria uma $self = $self->new(message => $message) unless blessed $self; # propaga um objeto como exceção die $self; } sub to_string { my $self = shift; return $self->{message}; } } use Try::Tiny; # try try { # sacanagem se você tiver um arquivo com esse nome open my $fh, 'zxczxczcz.txt' or Exception->throws("Error ao abrir o arquivo"); close $fh; } catch { my $ex = $_; warn $ex; }; ########################################## ## Função para exibir titulo ########################################## sub show_title { my $title = shift; say for ("\n", '=' x 60, "= ${title}", '=' x 60); }
htt[p]erl, simulador de web server
Algoritmo de Fatoração de Fermat (FFA) em Perl
Verificação de IP em blacklists
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Dificuldade para renderizar vídeo no kdenlive (6)
xubuntu sem sons de eventos (3)
Erro ao iniciar serviço samba4 como novo dc em um ambiente com ad [RES... (9)