Tratando Exceções com o Perl

Publicado por Daniel Vinciguerra (última atualização em 25/04/2016)

[ Hits: 3.010 ]

Homepage: http://bivee.com.br

Download 6402.exception.pl




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

  



Esconder código-fonte

#!/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);
}

Scripts recomendados

Sem Queda 2.0

chpasswd.cgi

Image Loader

Verificação de IP em blacklists

CatBox várias funções


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts