Depuração de scripts Perl

by

Sabe-se que em Perl os warnings nem sempre são esclarecedores. Ao contrário, o que era fácil, fica críptico.

Pegando leve, vamos ver um exemplo:

use strict;
use warnings;
my %hash = {
  cachorro => 'mamífero',
  golfinho => 'mamífero',
  tartaruga => 'réptil',
  galinha => 'galináceo'
}

E é claro que isso vai dar um erro grotesco:

Reference found where even-sized list expected at hasht.pl line 5.  (WTF!??)

Pra resolver a questão de vez, adicione o pacote diagnostics, ficando assim:

use warnings;
use strict;
use diagnostics;
my %hash = {
  cachorro => 'mamífero',
  golfinho => 'mamífero',
  tartaruga => 'réptil',
  galinha => 'galináceo'
}

Magicamente, o Perl praticamente nos dá uma aula junto com o erro:

Reference found where even-sized list expected at hasht.pl line 5 (#1)
(W misc) You gave a single reference where Perl was expecting a list
with an even number of elements (for assignment to a hash). This
usually means that you used the anon hash constructor when you meant
to use parens. In any case, a hash requires key/value pairs.

%hash = { one => 1, two => 2, };        # WRONG
%hash = [ qw/ an anon array / ];        # WRONG
%hash = ( one => 1, two => 2, );        # right
%hash = qw( one 1 two 2 );              # also fine

Ou seja, era só trocar as chaves por parênteses. Agora ficou mole, ou pelo menos bem mais fácil de entender as mensagens esquisitas dessa linguagem fabulosa!

Anúncios

3 Respostas to “Depuração de scripts Perl”

  1. Diogo Says:

    Excelente =DDD

    Pra melhorar, falta só mostrar o stacktrace ao dar erro.

  2. Lucas Says:

    Oi, é sempre bom lembar que o uso de:

    use warnings;
    use strict;
    use diagnostics;

    é só enquanto estiver desenvolvendo. Aumenta a memória necessária para exectuar o script.

    Mesmo assim, é uma boa dica! ,-)

  3. Lorn Says:

    Olá, tudo bem?
    Vi uma sitacão sua no twitter sobre o LWP::Curl 🙂 achei legal seu blog e sua comunidade no ning sobre, você conhece a comunidade Perl Brasileira? cascavel.pm? saopaulo.pm? rio.pm? está nas listas? caso não conheca:

    http://www.perl.org.br
    sao-paulo.pm.org
    http://rio.pm.org/

    Estamos sempre no irc também irc.perl.org
    #sao-paulo.pm
    #rio.pm

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: