[Cascavel-pm] Procurando chifre em cabeça de cavalo ???

Solli Moreira Honorio shonorio em terra.com.br
Terça Junho 8 11:15:22 CDT 2004


Pessoal,

Eu acabei de ver uma pergunta interessante no Perlmonks e queria reproduzir-la. O cara mostrou dois código que de vista ambos deveriam funciar, mas não foi o caso, vejam só:

%hash =  map { $_, "$var/$_" } @array;   # Works great
%hash =  map { "$var/$_", $_ } @array;   # Syntax Error!

A explicação é que '{' pode inicar tanto um hash como um bloco, sendo assim a '{' pode ser utilizada tanto para iniciar um bloco como para LIST, expressão. Como o Perl não olha a sentença inteira (na verdade eu acho que nenhuma linguagem de programação faz, elas compilam do início para o final e da esquerda para a direita - linearmente...), o map tem que adivinhar o que é desejado. Sendo assim é só utilizar a velha regra de matemática de explicitar o que você quer fazer primeiro com '()'. (mais informação : perldoc -f map )

A solução para o código com erro de sintaxe é :

%hash =  map { ( "$var/$_", $_ ) } @array; ou
%hash =  map +{ "$var/$_", $_ } @array;

Olhando o problema me lembrei de uma discussão que tivemos em um dos 'social meet' sobre a sintaxe do Perl, o Luis (monsieur champs) diz que ela é maravilhosa (e nem aceita discutição... é um ditador em pessoa :-), mas outros (como eu) acha que ela pode levar a confusão (principalmente para o iniciantes), como esta.

Isto só vem enfatizar a máxima do Perl, "Sempre existe mais de uma maneira de fazer a mesma coisa".

Solli
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20040608/d7cf75e8/attachment.htm


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