[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