[Cascavel-pm] [Spam] Re: [Spam] Re: PrincipaisContribuidoresCascavelPM

Flavio S. Glock fglock em gmail.com
Quinta Maio 31 06:09:50 PDT 2007


Em 30/05/07, Eden Cardim<edencardim em gmail.com> escreveu:
>
>     my $item;
>     my $some_rs = $c->model('Data::SomeTable');
>     do {
>         $item = $some_rs->next;
>         return unless $item;
>         } while ( $c->model('Data::AnotherTable')
>         ->find( $item->somefield, { key => 'another_table_somekey' } ) );
>
>     # fazer algo com $item aqui
>
> Aqui, não pude declarar a variável dentro do bloco porque eu preciso
> usar ela depois de terminado o loop. Tem outras formas de fazer, já
> inicializando $item, mas todas as alternativas que eu consegui
> imaginar levaram a algum tipo duplicação ou outras "deselegâncias" no
> código.

Eden:

Acredito que a melhor forma de "limpar" este código é mover o loop
para uma subrotina.

De qualquer forma, você pode mover o return() para fora do loop, acho
que fica mais fácil de entender a lógica (não testei este código):

     my $some_rs = $c->model('Data::SomeTable');
     my $item;
     do {
         $item = $some_rs->next;
     }
     while ( $item
          && $c->model('Data::AnotherTable')
               ->find( $item->somefield, { key => 'another_table_somekey' } )
     );
     return unless $item;
     # fazer algo com $item aqui

- Flavio S. Glock


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