Então...
O do {} realmente chuta a barraca e executa, afinal você escreveu "FAÇA
ISSO"!
Se quiser voltar para um outro comportamento vc pode trocar para um eval {},
ou se realmente deseja por um desejo absurdo utilizar o comando "do" vc pode
fazer isto:
perl -E ' +{ do {say "hello"}} while 0'

que poderia ser escrito sem mudar nada assim:
perl -E ' +{ say "hello"} while 0'
lembrando que é necessário colocar +{ pois se não o perl pode acabar
confundido as coisas [só no inline/fora do escopo de outro { } (nao li isso
nem testei..) ]

2011/7/4 Lucas Buchala <[email protected]>

> Obrigado pelas respostas. Dei uma lida nas manpages perlsyn e na
> documentação do "do" e agora consigo explicar melhor o motivo da minha
> confusão:
>
> Acho que dá para enxergar a situação de duas maneiras diferentes:
>
> 1) Ou vc encara como se só existisse uma estrutura de controle:
>
>  INSTRUÇÃO while CONDIÇÃO;
>
> que executa *apenas* se a CONDIÇÃO for verdadeira. Com a *exceção*, ou
> caso especial, de que se a INSTRUÇÃO for um "do { ... }" então executa
> pelo menos uma vez independente se a CONDIÇÃO for verdadeira ou não.
>
> 2) Ou vc encara como se existissem duas estruturas de controle *distintas*:
>
>  INSTRUÇÃO while CONDIÇÃO; # que funciona conforme o esperado
>  do { INSTRUÇÕES } while CONDIÇÃO; # que funciona como a linguagem C
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: [email protected]
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>



-- 
Renato Santos
http://www.renatocron.com/blog/
=begin disclaimer
   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
 SaoPaulo-pm mailing list: [email protected]
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a