[Cascavel-pm] (sem assunto)

Eden Cardim edencardim em gmail.com
Segunda Maio 14 09:36:08 PDT 2007


On 5/14/07, scvalmei em graaph.arq.br <scvalmei em graaph.arq.br> wrote:
> Salve monges,
>
> Gastei um tempo debugando um script meu até descobrir este nos warnings do Perl:
>
> teste.pl:
> -----------------
> use warnings;
>
> my $var = undef;
>
> if (1 == 2) {
>    print "Eu não estou aqui\n";
> } elsif ($var eq 'abc') {
>    print "E muito menos aqui\n";
> }
> -----------------
> $ perl teste.pl
> Use of uninitialized value in string eq at a line 5.
>
> O problema é que o warning se refere ao que houve na linha 7 e não na linha 5.
> Isto é, na hora de debugar fica bem mais difícil encontrar o erro, ainda mais
> quando o if e o elsif estão muito longe um do outro.
>
> Posso afirmar que isso é um bug do Perl?

Isso não é um bug, é um efeito colateral de como os compiladores
parseiam código. Acontece que, apesar de ser composto o if-elsif-else
é um único statement, e ele é reconhecido na linha 5. Como o erro
aconteceu dentro desse statement (no elsif, pra ser mais específico)
ele relatou a linha onde se localiza o statement culpado pelo warning:
a construção if-elsif-else, que se localiza na linha 5.

Experimente isso e vai acontecer o mesmo problema:

use warnings;
sub hello_world {}
my $bar = undef;
hello_world(
    'foo',
    $bar eq 'baz',
);

-- 
Eden Cardim
Instituto Baiano de Biotecnologia
Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas
Laboratório de Bioinformática


Mais detalhes sobre a lista de discussão Cascavel-pm