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!
Janeiro 27, 2009 às 7:41 am |
Excelente =DDD
Pra melhorar, falta só mostrar o stacktrace ao dar erro.
Fevereiro 4, 2009 às 10:13 am |
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! ,-)
Fevereiro 9, 2009 às 1:08 pm |
Olá, tudo bem?
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:
Vi uma sitacão sua no twitter sobre o LWP::Curl
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