<DIV>Pessoal,</DIV>
<DIV><BR>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ó:</DIV>
<DIV>&nbsp;</DIV>
<DIV>%hash =&nbsp; map { $_, "$var/$_" } @array;&nbsp;&nbsp; # Works great<BR>%hash =&nbsp; map { "$var/$_", $_ } @array;&nbsp;&nbsp; # Syntax Error!</DIV>
<DIV>&nbsp;</DIV>
<DIV>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 )</DIV>
<DIV>&nbsp;</DIV>
<DIV>A solução para o código com erro de sintaxe é :</DIV>
<DIV>&nbsp;</DIV>
<DIV>%hash =&nbsp; map { ( "$var/$_", $_ ) } @array; ou<BR>%hash =&nbsp; map +{ "$var/$_", $_ } @array;</DIV>
<DIV>&nbsp;</DIV>
<DIV>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.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Isto só vem enfatizar a máxima do Perl, "Sempre existe mais de uma maneira de fazer a mesma coisa".</DIV>
<DIV>&nbsp;</DIV>
<DIV>Solli</DIV>